问题描述
所以为了解释我的问题是什么,我做了一个图片框,我需要在里面填充许多填充方块。 但是,为此我需要创建一个画笔,并且我在网上找到的所有解决方案都被 Visual Studio 2019 作为错误返回。我不知道该怎么做了。
这是一个画笔声明的例子:
SolidBrush shadowBrush = new SolidBrush(customColor) (returns error)
Brush randomBrush = new brush(customColor) (returns error)
解决方法
GDI+ 绘图的工作方式是,您应该将表示绘图的所有数据存储在一个或多个字段中,然后在相应控件的 Paint
事件处理程序中读取该数据以进行绘图。在您的情况下,您需要信息来表示一个正方形及其绘制的颜色,并且您需要多个。在这种情况下,您应该定义一个具有 Rectangle
属性和 Color
属性的类型,并存储该类型的泛型 List
。然后,您可以遍历该列表,使用 SolidBrush
创建一个 Color
并调用 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)