OnPaint Laggen verhindern

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von tcs-1986.

    OnPaint Laggen verhindern

    Nabend,

    ich versuche gerade meinen eigenen Border zu machen. Ich habe nur Linien auf meiner Form und Rechts 2 Bilder die Buttons werden sollen.

    Es werden die Ränder neu gezeichnet und linke obere Ecke ist iene 45° Ecke. Rechts unten ist eine Picture Box die das Resize darstellen soll.
    Nur wenn ich Resize verschwinden die Linien.

    Hier mein Code:

    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    2. Dim g As Graphics = e.Graphics
    3. Dim p As New Pen(System.Drawing.Color.FromArgb(69, 193, 220))
    4. Dim points() As System.Drawing.PointF = { _
    5. New Point(22, 0), _
    6. New Point(0, 22), _
    7. New Point(0, Me.Height - 1), _
    8. New Point(Me.Width - 1, Me.Height - 1), _
    9. New Point(Me.Width - 1, 0), _
    10. New Point(22, 0) _
    11. }
    12. g.DrawPolygon(p, points)
    13. picResize.Top = Me.Height - picResize.Height - 2
    14. picResize.Left = Me.Width - picResize.Width - 2
    15. picClose.Left = Me.Width - picClose.Width - 4
    16. picMin.Left = Me.Width - picMin.Width - picClose.Width - 8
    17. lblTitle.Width = picMin.Left - lblTitle.Left - 4
    18. End Sub


    Resize Button:

    VB.NET-Quellcode

    1. Private Sub picResize_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picResize.MouseDown
    2. mousex = Me.Width
    3. mousey = Me.Height
    4. End Sub
    5. Private Sub picResize_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picResize.MouseMove
    6. If e.Button = Windows.Forms.MouseButtons.Left Then
    7. Me.Width = mousex + e.X
    8. Me.Height = mousey + e.Y
    9. End If
    10. End Sub


    PS: Achso und wie fülle ich den Inhalt aus? also alles was innerhalb des Borders ist?
    Bilder
    • test.png

      4,8 kB, 600×502, 117 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Hi Dodo.

    Ich kann dir leider nur zu deinem "PS-Problem" helfen.
    Die Form innerhalb des von dir erzeugten Polygons kannst du zb. so ausfüllen:

    VB.NET-Quellcode

    1. Dim b As New SolidBrush(Color.Black)
    2. b.Color = Color.FromArgb(69, 193, 220)
    3. g.FillPolygon(b, points)


    MfG, spaXi
    Ah geil, danke schön! Aber mit dem ausgefüllten flimmert die Form noch stärker. Ist ja auch klar, weils ständig neu gezeichnet wird.
    Aber es gibt doch sicher irgendwie ein Trick wie man sowas verhindern kann oder?

    Wo sind denn die Form Designer? Wie macht ihr das denn *g*
    Hey,
    hast du schon die DoubleBuffered Eigenschaft der Form auf True gesetzt? Die hilft schonmal. Zum verschwinden der Linien (sofern noch nicht gelöst) solltest du im Resize-Event (oder doch besser SizedChanged? Musste mal ausprobieren) der Form ein Me.Invalidate() aufrufen, damit erzwingst du das neuzeichnen und die Linien sollten wieder stimmen.
    Ansonsten kann ich dir mal diesen Artikel ans Herz legen:
    mycsharp.de/wbb2/thread.php?threadid=59980
    Ist zwar C#, aber spielt ja bei Eigenschaften/Events keine Rolle, die sind ja in VB identisch.

    Cheerio