Paint-Event auf "Knopfdruck" selbst auslösen / ausführen

  • VB.NET

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

    Paint-Event auf "Knopfdruck" selbst auslösen / ausführen

    Hallo zusammen,

    ich tüftel gerade ein wenig mit GDI+ in Visual Basic herum und versuche, auf Tastendruck ein Quadrat zu bewegen.

    Zunächst zeichne ich das Quadrat. Wie empfohlen nutze ich das Paint-Event dazu. Dazu der Code:

    VB.NET-Quellcode

    1. Dim gBrushChar As New SolidBrush(ColorTranslator.FromHtml("#7024a6"))
    2. Dim iLeft As Integer = 10
    3. Private Sub _Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint
    4. With e.Graphics
    5. ' Increase the quality
    6. .SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    7. .TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
    8. .PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
    9. .InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear
    10. .CompositingQuality = Drawing2D.CompositingQuality.HighQuality
    11. ' Draw
    12. .FillRectangle(gBrushChar, iLeft, 10, 100, 100)
    13. End With
    14. End Sub

    Soweit, so gut. Nun möchte ich auf Tastendruck iLeft um einen Wert, zum Beispiel 50, erhöhen, um das Quadrat zu bewegen. Das Erhöhen ist kein Problem:

    VB.NET-Quellcode

    1. Private Sub _KeyPress(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.Right Then
    3. iLeft += 50
    4. End If
    5. End Sub

    Jetzt ist aber mein Problem, dass das Quadrat nicht neu gezeichnet wird, da das Paint-Event nicht erneut ausgelöst wird. Wie schaffe ich es, dies manuell zu tun oder auf anderem Wege den Sub _Paint auszuführen?

    Danke schon einmal im Voraus :)
    Control.Invalidate hat auch eine Überladung, der man angeben kann, welcher Bereich neu gezeichnet werden soll.
    Das verbessert u.U. die Performance enorm, wenn nur noch ein Bruchteil des Controls zu zeichnen ist.
    Generell heißt dieses Programmier-Thema "OwnerDrawing", und habich Tut zu gemacht: OwnerDrawing