GDI+ 绘图的工作方式是,您应该将表示绘图的所有数据存储在一个或多个字段中,然后Paint
在相应控件的事件处理程序中读取该数据以进行绘图。在您的情况下,您需要信息来表示一个正方形以及它将被绘制的颜色,并且您需要其中的多个。在这种情况下,您应该定义一个具有Rectangle
属性和Color
属性的类型,并存储List
该类型的泛型。然后,您可以遍历该列表,SolidBrush
使用Color
and 调用创建一个FillRectangle
。
Public Class Form1
Private ReadOnly boxes As New List(Of Box)
Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
For Each box In boxes
Using b As New SolidBrush(box.Color)
e.Graphics.FillRectangle(b, box.Bounds)
End Using
Next
End Sub
End Class
Public Class Box
Public Property Bounds As Rectangle
Public Property Color As Color
End Class
现在,要添加一个正方形,您只需创建一个新Box
对象,将其添加到 中,List
然后调用Invalidate
. PictureBox
为简单起见,您可以Invalidate
不带参数调用,整个PictureBox
将被重新绘制。如果您可以指定已经或可能已经改变的区域,那就更好了,因为这样可以将慢速部分的重新绘制保持在最低限度。由于您已经有一个Rectangle
描述已更改区域的描述,您可以传递它,例如
Dim boxBounds As New Rectangle(10, 10, 100, 100)
boxes.Add(New Box With {.Bounds = boxBounds, .Color = Color.Black})
PictureBox1.Invalidate(boxBounds)