如何在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

使用painteventargs class对象,通常通过控制表面上的绘图来处理。

要提高控件的绘制((事件,请调用其无效((方法。
(请注意,Invalidate()方法具有许多过载,其中一些允许仅重新绘制表面的定义区域。(

如果在其他地方创建了图形对象(就像您现在所做的那样(,则使用此对象执行的图纸将持续或在您不想时删除(例如,如果控件需要重新粉刷自身 - 经常发生 - 图纸将被删除(。
另外,无法存储图形对象。一旦控件重新粉刷表面,它将成为无效的对象。

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

  • 创建共享笔(如果需要的话,可以随时重新定义它,使用它的属性(,这样您就不必每次需要绘制某些东西时创建新的。
  • 使用共享点字段存储图形的当前中心。
  • Graphics.DrawLine()移至表格的油漆事件。
  • 请记住 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(。

最新更新