-1

所以为了解释我的问题是什么,我做了一个 PictureBox,我需要在里面填上很多 FILLED 方块。但是,要这样做,我需要创建一个画笔,并且我在网上找到的所有解决方案都被 Visual Studio 2019 作为错误返回。我不知道该怎么办了。

下面是一个画笔声明的例子:

SolidBrush shadowBrush = new SolidBrush(customColor) (returns error)


Brush randomBrush = new brush(customColor) (returns error)
4

1 回答 1

0

GDI+ 绘图的工作方式是,您应该将表示绘图的所有数据存储在一个或多个字段中,然后Paint在相应控件的事件处理程序中读取该数据以进行绘图。在您的情况下,您需要信息来表示一个正方形以及它将被绘制的颜色,并且您需要其中的多个。在这种情况下,您应该定义一个具有Rectangle属性和Color属性的类型,并存储List该类型的泛型。然后,您可以遍历该列表,SolidBrush使用Colorand 调用创建一个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)
于 2021-01-28T23:49:11.670 回答