Visual Basic GDI +绘图线

时间:2014-04-11 21:10:36

标签: vb.net gdi+

我正在开发一个简单的VB界面,该界面应该允许用户从鼠标点击到鼠标位置的位置画一条线,然后留下释放鼠标按钮的行。我是VB GDI +的新手,可以使用一些指针或提示。我需要它,以便我可以在同一控制面板上绘制多行,每次我开始一个新的行,以某种方式使Paint绘制函数不必遍历我已绘制的每一行。这是我的代码:     公共类Form1

Dim down = False
Dim ptA As Point
Dim ptB As Point
Dim ptC As Point
Dim ptStart As New List(Of Point)    ' Starting point of each line
Dim ptEnd As New List(Of Point)      ' Ending Point of Each line

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.DoubleBuffered = True
End Sub

Private Sub Win_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Win.MouseDown
    down = True
    ptA = New Point(e.X, e.Y)
End Sub

Private Sub Win_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Win.MouseMove
    If down = True Then
        ptB = New Point(e.X, e.Y)
        Win.Invalidate()    
    End If
End Sub

Private Sub Win_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Win.MouseUp
    down = False
    ptC = New Point(e.X, e.Y)
    ptStart.Add(ptA)
    ptEnd.Add(ptC)
End Sub

Private Sub Win_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Win.Paint
    e.Graphics.Clear(Color.Black)
    e.Graphics.DrawLine(Pens.LawnGreen, ptA, ptB)
    For i = 0 To ptStart.Count - 1
        Win.CreateGraphics.DrawLine(Pens.LawnGreen, ptStart(i), ptEnd(i))
    Next
End Sub


End Class

为了保留现有的线条,我将点存储在列表中,每次在绘图时移动鼠标,我都会调用Paint函数,每次调用它时,它都会循环遍历每个点并在他们。任何建议将不胜感激。

谢谢,

JD

* * 编辑

Public Class Form1

Dim down = False
Dim ptA As Point
Dim ptB As Point
Dim ptC As Point
Dim ptStart As New List(Of Point)
Dim ptEnd As New List(Of Point)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.DoubleBuffered = True
End Sub

Private Sub Win_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Win.MouseDown
    down = True
    ptA = New Point(e.X, e.Y)
End Sub

Private Sub Win_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Win.MouseMove
    If down = True Then
        ptB = New Point(e.X, e.Y)
        Win.Invalidate()
    End If
End Sub

Private Sub Win_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Win.MouseUp
    down = False
    ptC = New Point(e.X, e.Y)
    ptStart.Add(ptA)
    ptEnd.Add(ptC)

End Sub

Private Sub Win_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Win.Paint
    e.Graphics.Clear(Color.Black)
    e.Graphics.DrawLine(Pens.LawnGreen, ptA, ptB)
    For i = 0 To ptStart.Count - 1
        e.Graphics.DrawLine(Pens.LawnGreen, ptStart(i), ptEnd(i))
    Next
End Sub


End Class

0 个答案:

没有答案