Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
VB.NET在PictureBox上绘制多条线而不删除以前的更改_.net_Vb.net_Graphics_Drawing - Fatal编程技术网

VB.NET在PictureBox上绘制多条线而不删除以前的更改

VB.NET在PictureBox上绘制多条线而不删除以前的更改,.net,vb.net,graphics,drawing,.net,Vb.net,Graphics,Drawing,我正在尝试在VB.NET PictureBox上绘制多条线,而不删除以前的更改。如果我尝试在不同时间用e.graphics在PictureBox上画两条线,那么它会删除以前的线/更改 我在PictureBox的绘画活动中使用此代码 此示例完美地在PictureBox内绘制了一条绿线 但是,当我有一个按钮,在窗体已经绘制之后在PictureBox上绘制另一条线时,前面绘制的线就会消失 例如,如果我有一个这样的函数,它画了另一条线 Private Function DrawAnotherLine(x

我正在尝试在VB.NET PictureBox上绘制多条线,而不删除以前的更改。如果我尝试在不同时间用e.graphics在PictureBox上画两条线,那么它会删除以前的线/更改

我在PictureBox的绘画活动中使用此代码

此示例完美地在PictureBox内绘制了一条绿线

但是,当我有一个按钮,在窗体已经绘制之后在PictureBox上绘制另一条线时,前面绘制的线就会消失

例如,如果我有一个这样的函数,它画了另一条线

Private Function DrawAnotherLine(xPos1 As Integer, yPos1 As Integer, xPos2 As Integer, yPos2 As Integer)

point1X = xPos1
point1Y = yPos1

point2X = xPos2
point2Y = yPos2

PictureBox1.Invalidate()
End Function
它删除绘制的第一条线,仅绘制第二条线。我希望它在第一行的上面画第二行,而不是仅仅删除第一行,我该怎么做


注意:我不能在函数中包括绘制第一行,因为此函数将在其已绘制的行之上多次使用。

GDI+绘制非常简单:

声明一个或多个字段以存储表示图形的数据。 处理要在其上绘制的控件的绘制事件。 在步骤2中的事件处理程序中,从步骤1中声明的字段中获取数据并执行绘图。 要更改图形,请修改步骤1中声明的字段,并在控件上调用Invalidate。 如果希望能够绘制多条线,那么首先需要一个表示一条线的数据结构,然后在某个位置存储该数据结构的多个实例。最明显的方法是定义一个包含单行数据的类或结构,例如

公共班级线 公共只读属性StartPoint作为点 公共只读属性终结点作为点 公共子新闻起点作为点,终点作为点 Me.StartPoint=StartPoint Me.EndPoint=EndPoint 端接头 末级 然后声明引用该类型集合的字段:

专用线路作为新线路列表 然后,绘制事件处理程序绘制集合中的所有线条:

私有子PictureBox1\u Paintsender作为对象,e作为PaintEventArgs处理PictureBox1.Paint 每行中的每一行 e、 Graphics.DrawLinePens.Black、line.StartPoint、line.EndPoint 下一个 端接头 要绘制新线,请将新线对象添加到集合并使控件无效:

私有子AddNewLinestartPoint作为点,endPoint作为点 lines.AddNew LinestartPoint,端点 图1.无效 端接头 如何获得这些分数取决于你自己。您可以在MouseDown事件中记录位置,然后在MouseUp事件中调用AddNewLine,也可以完全执行其他操作


调用Invalidate时,最好指定可能的最小区域,但这超出了这个问题的范围。

GDI+绘图非常简单:

声明一个或多个字段以存储表示图形的数据。 处理要在其上绘制的控件的绘制事件。 在步骤2中的事件处理程序中,从步骤1中声明的字段中获取数据并执行绘图。 要更改图形,请修改步骤1中声明的字段,并在控件上调用Invalidate。 如果希望能够绘制多条线,那么首先需要一个表示一条线的数据结构,然后在某个位置存储该数据结构的多个实例。最明显的方法是定义一个包含单行数据的类或结构,例如

公共班级线 公共只读属性StartPoint作为点 公共只读属性终结点作为点 公共子新闻起点作为点,终点作为点 Me.StartPoint=StartPoint Me.EndPoint=EndPoint 端接头 末级 然后声明引用该类型集合的字段:

专用线路作为新线路列表 然后,绘制事件处理程序绘制集合中的所有线条:

私有子PictureBox1\u Paintsender作为对象,e作为PaintEventArgs处理PictureBox1.Paint 每行中的每一行 e、 Graphics.DrawLinePens.Black、line.StartPoint、line.EndPoint 下一个 端接头 要绘制新线,请将新线对象添加到集合并使控件无效:

私有子AddNewLinestartPoint作为点,endPoint作为点 lines.AddNew LinestartPoint,端点 图1.无效 端接头 如何获得这些分数取决于你自己。您可以在MouseDown事件中记录位置,然后在MouseUp事件中调用AddNewLine,也可以完全执行其他操作

调用Invalidate时,最好指定可能的最小区域,但这超出了这个问题的范围

Private Function DrawAnotherLine(xPos1 As Integer, yPos1 As Integer, xPos2 As Integer, yPos2 As Integer)

point1X = xPos1
point1Y = yPos1

point2X = xPos2
point2Y = yPos2

PictureBox1.Invalidate()
End Function