如何清除vb.net中的绘制线?

时间:2018-04-24 18:09:52

标签: vb.net

我正在编写一个简单的测试程序,它在一个表单中绘制一个轴/十字准线。我有两个文本框,我放在x-center和y-center中,然后根据它绘制十字准线。我希望能够放入新坐标,并将十字准线移动到新位置,但是当我这样做时,旧绘图就会停留在那里。我想删除旧图纸,然后绘制新图纸。

我的代码如下:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim mypen As Pen
        mypen = New Pen(Drawing.Color.Red, 1)
        Dim mygraphics As Graphics = Me.CreateGraphics
        Dim x_center = Integer.Parse(xPos.Text)
        Dim y_center = Integer.Parse(yPos.Text)
        mygraphics.DrawLine(mypen, x_center - 50, x_center, x_center + 50, x_center)
        mygraphics.DrawLine(mypen, y_center, y_center - 50, y_center, y_center + 50)
    End Sub

End Class

1 个答案:

答案 0 :(得分:0)

控制界面上的绘图通常通过控件的Paint()事件使用其PaintEventArgs类对象进行处理。

要引发Control的Paint()事件,请调用其Invalidate()方法 (请注意,Invalidate()方法有许多重载,其中一些允许仅重新绘制表面的已定义区域。

如果在其他地方创建了Graphics对象(正如您现在所做的那样),使用此对象执行的绘图将会保留或在您不想要时将被删除(例如,如果控件需要重绘本身 - 这种情况经常发生 - 图纸将被删除) 此外,无法存储Graphics对象。一旦控件重新绘制其表面,它将成为无效对象。

您可以通过这种方式重新设计代码。

  • 创建一个共享笔(如果需要,您可以随时使用其属性重新定义它),这样您每次需要绘制内容时都不必创建新的笔。
    < / LI>
  • 使用共享点字段存储图形的当前中心。
  • Graphics.DrawLine()移至表单的Paint事件。
  • 当表单关闭时,请记住 Dispose() Pen对象(您可以使用它的Dispose()预定义方法)。


Public Class Form1

    Private mypen As Pen = New Pen(Color.Red, 1)
    Private Position As Point = New Point(-1, -1)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If (Integer.TryParse(xPos.Text, Position.X) = True) AndAlso
           (Integer.TryParse(yPos.Text, Position.Y) = True) Then
            Me.Invalidate()
        End If
    End Sub

    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
        If Position.X > -1 Then
            e.Graphics.DrawLine(mypen, Position.X - 50, Position.Y, Position.X + 50, Position.Y)
            e.Graphics.DrawLine(mypen, Position.X, Position.Y - 50, Position.X, Position.Y + 50)
        End If
    End Sub

End Class

然而,这并不是那么有效,因为你需要使整个表格无效。

要完整实施,请查看此课程(PasteBin - CrossHair)