Obwohl du direkt zeichnen kannst, solltest du prinzipiell immer im Paint Event zeichnen. Paint Event wird ausgelöst wenn ein Fenster neu gezeichnet werden soll. Dass kann sein weil ein anderes Fenster dein Fenster gedeckt hat und weggezogen oder geschlossen wird, die Anwendung war minimiert und wird wieder aktiviert, oder unter anderen Umständen. Wenn du direkt zum Bildschirm zeichnest geht dann alles verloren. Deshalb was du zeichnen willst irgendwo merken und dann im Paint Event zeichnen. Oder du kannst auch in ein Bitmap zeichnen (als Puffer) und nur dein Bitmap im Paint Event zeichnen. Das ist aber etwas inflexibel wenn die Darstellung geändert werden kann. Dieser Code zeichnet jetzt ein Kreuz am Mauspunkt. Wird bei jedem Click am neuen Ort gezeichnet. Button1 zeichnet dann alle Punkte als Kreis, und Button2 setzt alles wieder zurück.
Private points As New ArrayList
Private draw As Boolean
Private drawCross As Boolean
Private cp As Point = New Point(-1, -1)
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
Debug.WriteLine("Point: " & (New Point(e.X, e.Y)).ToString())
Dim np As New Point(e.X, e.Y)
points.Add(np)
cp = np
drawCross = True
Me.Refresh()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
draw = True
drawCross = False
Me.Refresh()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button2.Click
points.Clear()
draw = False
drawCross = False
Me.Refresh()
End Sub
Private Const csize As Integer = 5
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
If drawCross Then
e.Graphics.DrawLine(Pens.Green, cp.X - csize, cp.Y, cp.X + csize, _
cp.Y)
e.Graphics.DrawLine(Pens.Green, cp.X, cp.Y - csize, cp.X, cp.Y + _
csize)
End If
If draw Then
For Each p As Point In points
Debug.WriteLine("Draw: " & p.ToString())
e.Graphics.DrawEllipse(Pens.Red, p.X - csize, p.Y - csize, _
csize * 2, csize * 2)
Next
End If
End Sub ________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist |