无法存储图形对象。它不断被删除/更新。你最终会得到一个无效的。这真的没用,你可以说,这是一个错误。
可以使用创建的图形对象
Control.CreateGraphics()
但你必须记住
持久的
; 当您在其上绘制的控件需要重新绘制()本身时(例如,您在其上拖动某个对象,如果它是一个窗体,当它最小化时等),它将被擦除。
这些财产,
Me.FormBorderStyle = FormBorderStyle.None
和
Me.WindowState = FormWindowState.Maximized
最好在设计器中设置。
没有理由让他们
Form.Load()
事件他们的状态甚至不受任何条件的限制。
一般来说,尽可能轻量级地保留窗体的加载事件,并避免设置可能导致级联事件的属性。
例如:
定义用于存储图像的对象:
(The
DrawBitmaps
标志用于让窗体知道何时绘制这些位图)。
Public Class MyBitmap
Public Property Image As Bitmap
Public Property Position As Point
Public Property Size As Size
End Class
Public MyBitmaps As List(Of MyBitmap)
Public DrawBitmaps As Boolean = False
某处(甚至在
类型加载()
),用位图填充列表:
(此处,位图大小设置为原始大小,但您可以将其设置为您认为合适的任何尺寸)。
MyBitmaps = New List(Of MyBitmap)
MyBitmaps.Add(New MyBitmap With {.Image = My.Resources.black_Background,
.Position = New Point(0, 80),
.Size = New Size(My.Resources.black_Background.Width,
My.Resources.black_Background.Height)})
MyBitmaps.Add(New MyBitmap With {.Image = My.Resources.greenSquare,
.Position = New Point(2, 82),
.Size = New Size(My.Resources.greenSquare.Width,
My.Resources.greenSquare.Height)})
Paint()事件
e.Graphics
完成所有绘画:
(请注意,除非
绘图位图
标志设置为
True
=>加载/显示时,它不会绘制这些位图。另一个条件是基本故障保护。
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
If DrawBitmaps = True AndAlso MyBitmaps.Count > 0 Then
For Each _Item As MyBitmap In MyBitmaps
e.Graphics.DrawImage(_Item.Image, New Rectangle(_Item.Position, _Item.Size))
Next
End If
End Sub
什么时候
Button1
单击后,表单将绘制位图列表:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DrawBitmaps = True
Me.Invalidate()
End Sub
在代码中的某个位置,添加一个新位图,并告诉窗体仅使此新位图大小的区域无效:
MyBitmaps.Add(New MyBitmap With {.Image = My.Resources.[AnotherBitmap],
.Position = New Point(50, 50),
.Size = New Size(200, 200)})
Me.Invalidate(New Rectangle(MyBitmaps.Last().Position, MyBitmaps.Last().Size))
从列表中删除位图并重新绘制:
MyBitmaps.RemoveAt(0)
Me.Invalidate()