使用定制的画笔在 Picturboxes 内创建填充方块并从列表中提取

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

这是一个画笔声明的例子:

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


Brush randomBrush = new brush(customColor) (returns error)
gddgv 回答:使用定制的画笔在 Picturboxes 内创建填充方块并从列表中提取

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)
本文链接:https://www.f2er.com/1021466.html

大家都在问