GDI + Zeichnungen Entfernen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    GDI + Zeichnungen Entfernen

    Hallo Com,

    Da mir mehrmalig entfehlt wurde Controls mit GDI+ zu entwerfen habe ich mich mal Ran Gemacht und kann auch schon ein "Rechteck" Zeichnen. Nun möchte ich aber das wenn der user Die Weite ändert das rechteck sich erneut Zeichnet. Es werden Später auch Strings Gezeichnet. Meine Frage

    1. muss ich alles neu zeichnen oder kann ich auch das "Rechteck" Lokal Deklarieren ? Wenn nicht wie lösche ich die Zeichnung

    VB.NET-Quellcode

    1. Public Class Button
    2. Private rect As System.Drawing.Rectangle
    3. Private PanelColor_Value As Drawing.Brush
    4. Public Property Panel_Color() As Drawing.Brush
    5. Get
    6. Return PanelColor_Value
    7. End Get
    8. Set(ByVal value As Drawing.Brush)
    9. PanelColor_Value = value
    10. DrawPanel()
    11. End Set
    12. End Property
    13. Private PanelWidth As Integer
    14. Public Property Panel_Width() As Integer
    15. Get
    16. Return PanelWidth
    17. End Get
    18. Set(ByVal value As Integer)
    19. PanelWidth = value
    20. DrawPanel()
    21. End Set
    22. End Property
    23. Private Sub Button_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    24. DrawPanel()
    25. End Sub
    26. Private Sub DrawPanel()
    27. Dim height As Integer = Me.Height
    28. Dim width As Integer = Me.Panel_Width
    29. Dim PanelColor As Drawing.Brush = Me.Panel_Color
    30. Dim d As Drawing.Graphics = CreateGraphics()
    31. rect.X = 0
    32. rect.Y = 0
    33. rect.Height = height
    34. rect.Width = width
    35. d.FillRectangle(Drawing.Brushes.Green, rect)
    36. End Sub
    37. End Class

    Danke und Grüße Andy
    such mal nach einschlägigen tuts im WinForms-Tutorial-Bereich. Sollte OwnerDrawing oder GDI im Titel enthalten.

    Generell gilt:
    • nur im Paint-Event zeichnen, nur mit dem dort übermittelten Graphics-Objekt.
    • immer alles zeichnen. Das ist performancemäßig egal, denn das Graphics ist geclippt, sodass tatsächlich nur genau der notwendige Ausschnitt gezeichnet wird - alles annere wird automatisch übersprungen.
    • einen Zeichen-Vorgang ruft man nicht direkt auf, sondern man fordert das Paint-Event an, indem man Control.Invalidate(rct As RectAngle) aufruft.
      rct gibt hierbei genau den neu zu zeichnenden Bereich an. Damit wird auch ein Bereich gelöscht, denn wenn du anschließend im Paint-Event nix hinzeichnest, so ist die vorherige Zeichnung an der Stelle natürlich weg.

    Aber such nach Tutorials, oder frag nochmal, wennde nix gscheits findest.
    @Andy16823:: Das Paint-Event zeichnet seine "GUI" aus dem Gedächtnis auf ein leeres Blatt in der jeweils eingestellten Hintergrundfarbe.
    Alle Informationen, die Du in einem zeitlichen Ablauf darstellen willst, musst Du selbst so organisieren, dass sie halt so darbestellt werden.
    Beispiel: Form mit Button und Timer:

    VB.NET-Quellcode

    1. Private number As Integer = 0
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Me.Timer1.Enabled = Not Me.Timer1.Enabled
    4. End Sub
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. number += 1
    7. If number = 8 Then
    8. number = 0
    9. End If
    10. Invalidate()
    11. End Sub
    12. Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    13. For i = 0 To number
    14. Dim y = 20 * i
    15. e.Graphics.DrawLine(Pens.Black, 0, y, Me.Width, y)
    16. Next
    17. End Sub
    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!