GDI+ Linien in Button_Click nicht dauerhaft sichtbar

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Elephant.

    GDI+ Linien in Button_Click nicht dauerhaft sichtbar

    Ich fang grade an mit GDI+.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim stift1 As New Pen(Color.Red, 5)
    3. Dim stift2 As New Pen(Color.Green, 5)
    4. Dim stift3 As New Pen(Color.Blue, 5)
    5. Dim stift4 As New Pen(Color.Yellow, 5)
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. Dim graph As Graphics = Me.CreateGraphics()
    8. graph.DrawLine(stift3, 10, 180, 350, 180)
    9. graph.DrawLine(stift4, 180, 10, 180, 350)
    10. End Sub
    11. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    12. With e.Graphics
    13. .DrawLine(stift1, 10, 10, 350, 350)
    14. .DrawLine(stift2, 10, 350, 350, 10)
    15. End With
    16. End Sub
    17. End Class

    Einige grafische Elemente werden gleich beim Programmstart da sein, die mache ich in Form1_Paint.
    Andere erst nach Button_Click.
    Zustand jetzt:
    Anderes Fenster über Form1 hin und weg kein Problem, alle Linien bleiben sichtbar.
    Form1 in die Taskleiste und wieder raus, nur die Linien in Form1_Paint sind sichtbar.
    Wie macht man es das die Linien in Button1_Click dauerhaft sichtbar sind?

    Elephant schrieb:

    Wie macht man es das die Linien in Button1_Click dauerhaft sichtbar sind?
    Indem Du sie in Form_Paint malst und in Button_Click ein Flag setzt, dass diese Linien in Form_Paint gemalt werden sollen.
    Diese Lektion hast Du letztens nicht gelernt:
    Gemalt wird ausschließlich in Form_Paint :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du kannst gerne ein Aktivierflag in die Click-Methode reinmachen, was steuert, ob die Buttongeschichte gezeichnet wird.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Elephant So:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Flag1 As Boolean
    3. Private Flag2 As Boolean
    4. Private Flag3 As Boolean
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Flag1 = Not Flag1
    7. Me.Invalidate()
    8. End Sub
    9. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    10. Flag2 = Not Flag2
    11. Me.Invalidate()
    12. End Sub
    13. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    14. Flag3 = Not Flag3
    15. Me.Invalidate()
    16. End Sub
    17. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    18. If Flag1 Then
    19. e.Graphics.DrawLine(Pens.Red, 10, 10, 100, 100)
    20. End If
    21. If Flag2 Then
    22. e.Graphics.DrawLine(Pens.Blue, 10, 100, 100, 10)
    23. End If
    24. If Flag3 Then
    25. e.Graphics.DrawLine(Pens.Green, 40, 400, 10, 100)
    26. End If
    27. End Sub
    28. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!