程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了VB.NET 在PictureBox 上绘制多条线而不删除以前的更改大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到VB.NET 在PictureBox 上绘制多条线而不删除以前的更改的问题如何解决?下面主要结合日常开发的经验,给出你关于VB.NET 在PictureBox 上绘制多条线而不删除以前的更改的解决方法建议,希望对你解决VB.NET 在PictureBox 上绘制多条线而不删除以前的更改有所启发或帮助;

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

我在 PictureBoxpaint 事件中使用此代码。

Public Class Drawline

Dim point1X As Integer = 10
Dim point1Y As Integer = 10

Dim point2X As Integer = 50
Dim point2Y As Integer = 50

Private Sub PictureBox1_Paint(sender As Object,e As PaintEventArgs) Handles PictureBox1.Paint
    Dim pt As New Point(point1X,point1Y)
    Dim pt1 As New Point(point2X,point2Y)
    e.Graphics.Drawline(Pens.Green,pt,pt1)    
End Sub

End Class

此示例完美地在 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+ 绘图非常简单:

  1. 声明一个或多个字段来存储代表您的绘图的数据。
  2. 处理要绘制的控件的 Paint 事件。
  3. 在步骤 2 的事件处理程序中,从步骤 1 中声明的字段中获取数据并执行绘图。
  4. 要更改绘图,请修改第 1 步中声明的字段并在控件上调用 Invalidate

如果您希望能够绘制多条线,那么您首先需要一个表示单条线的数据结构,然后在某处存储该数据结构的多个实例。最明显的方法是定义一个包含单行数据的类或结构,例如

Public Class Line

    Public ReadOnly Property StartPoint as Point

    Public ReadOnly Property EndPoint as Point

    Public Sub New(startPoint as Point,endPoint as Point)
        Me.StartPoint = startPoint
        Me.EndPoint = endPoint
    End Sub

End Class

然后声明一个引用该类型集合的字段:

Private lines As New List(Of LinE)

您的 Paint 事件处理程序然后绘制集合中的所有线条:

Private Sub PictureBox1_Paint(sender As Object,e As PaintEventArgs) Handles PictureBox1.Paint
    For Each line In lines
        e.Graphics.DrawLine(Pens.black,line.StartPoint,line.EndPoint)
    Next
End Sub

要画一条新线,请向集合中添加一个新的 Line 对象和 Invalidate 控件:

Private Sub AddNewLine(startPoint as Point,endPoint as Point)
    lines.Add(New Line(startPoint,endPoint))
    PictureBox1.Invalidate()
End Sub

如何获得这些积分取决于您。您可以在 @H_180_3@mouseDown 事件中记录位置,然后在 AddNewLine 事件中调用 @H_180_3@mouseUp,或者您可以完全做其他事情。

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

大佬总结

以上是大佬教程为你收集整理的VB.NET 在PictureBox 上绘制多条线而不删除以前的更改全部内容,希望文章能够帮你解决VB.NET 在PictureBox 上绘制多条线而不删除以前的更改所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: