Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在picturebox上绘制多个多边形_.net_Vb.net - Fatal编程技术网

.net 在picturebox上绘制多个多边形

.net 在picturebox上绘制多个多边形,.net,vb.net,.net,Vb.net,我有一个带平面图的图片盒 在该图像上,我想绘制一个多边形,我可以使用以下代码: Private points As New List(Of Point) Private Sub FlorPlan_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FlorPlan.MouseDown points.Add(e.Location) FlorPlan.In

我有一个带平面图的图片盒

在该图像上,我想绘制一个多边形,我可以使用以下代码:

Private points As New List(Of Point)

Private Sub FlorPlan_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FlorPlan.MouseDown

points.Add(e.Location)
FlorPlan.Invalidate(New Rectangle(e.X, e.Y, 5, 5))
End Sub

Private Sub FlorPlan_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles FlorPlan.Paint
    For Each p As Point In points
        e.Graphics.FillRectangle(Brushes.Red, p.X, p.Y, 5, 5)
    Next
End Sub

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim myPen As Pen
    myPen = New Pen(Drawing.Color.Red, 2)

    Dim myGraphics As Graphics = PictureBox.CreateGraphics
    myGraphics.DrawPolygon(myPen, points.ToArray)
    'myGraphics.FillPolygon(Brushes.Red, points.ToArray)
    myGraphics.Dispose()
End Sub
我想做的是抓住那个物体,这样我以后可以改变背景色,等等


我应该如何进行

这通常有两种方式:

  • 手动跟踪某些自定义类列表中的所有图形对象
  • 为每个图形对象动态加载新控件
如果选择后者,我建议您创建自己的
UserControl
,其中包含关于每个图形对象的所有必要数据,例如多边形中的点。要动态加载它们,可以执行以下操作:

Private Sub AddGraphicalObject(properties As GraphicalObjectProperties)
    Dim control As New GraphicalObjectControl()
    control.Properties = properties
    ' set position and size
    Panel1.Controls.Add(control)
End Sub

在添加控件上的某些事件时,您可能也希望向这些事件添加一些事件处理程序。

您需要跟踪某个自定义类的对象列表中每个图形对象的所有属性,或者需要将每个对象显示为一个新控件,并让每个控件保留所有这些属性。您可以在每次需要另一个图形对象时动态实例化一个新控件。@Stevendogart我应该如何动态实例化一个新控件?我尝试创建一个新的picturebox,然后将图形放入其中,并将新的picturebox添加到现有的picturebox中。是这样吗?如何创建一个新控件来存储该类型的信息?右键单击项目,然后在关联菜单中选择向项目添加新项。在对话框窗口中,选择要将其作为用户控件。有关更多信息,请在网上搜索——我相信其他网站上也有一些很棒的教程。如果您只需要一个图片框,则只需将图片框控件拖动到设计器中的用户控件,然后将其停靠属性设置为“填充”。