In SplitContainer zeichen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    In SplitContainer zeichen

    Hallo

    ich versuche momentan, das man Interaktiv in einem Splitcointer zeichnen kann (in Panel2 um genau zu sein). Den untenstehenden Code verwende ich... komischer weiße funktioniert er, wenn ich es auf die Form direkt anwende und den Splitcontainer lösche.

    VB.NET-Quellcode

    1. Dim RcDraw As Rectangle
    2. Dim PenWidth As Integer = 5
    3. Private Sub SplitContainer1_Panel2_Paint(sender As Object, e As PaintEventArgs) Handles SplitContainer1.Panel2.Paint
    4. e.Graphics.DrawRectangle(New Pen(Color.Black, PenWidth), RcDraw)
    5. End Sub
    6. Private Sub SplitContainer1_MouseDown(sender As Object, e As MouseEventArgs) Handles SplitContainer1.MouseDown
    7. RcDraw.X = e.X
    8. RcDraw.Y = e.Y
    9. End Sub
    10. Private Sub SplitContainer1_MouseUp(sender As Object, e As MouseEventArgs) Handles SplitContainer1.MouseUp
    11. If e.X < RcDraw.X Then
    12. RcDraw.Width = RcDraw.X - e.X
    13. RcDraw.X = e.X
    14. Else
    15. RcDraw.Width = e.X - RcDraw.X
    16. End If
    17. If e.Y < RcDraw.Y Then
    18. RcDraw.Height = RcDraw.Y - e.Y
    19. RcDraw.Y = e.Y
    20. Else
    21. RcDraw.Height = e.Y - RcDraw.Y
    22. End If
    23. SplitContainer1.Invalidate(RcDraw)
    24. End Sub
    25. End Class


    weiß jemand was da schiff läuft ?(
    edit:

    komischer weiße, sobald ich den splitter bewege erscheint das gezeichnete Dreieck. Doch es verändert immer die größe, je nachdem wie ich den splitter verschiebe

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

    kannst du ein Beispielprojekt anhängen ? Aber nur Sources, keine Binaries.

    Ansonsten wundere ich mich, dass du einmal Events von SplitContainer1.Panel2 abonnierst ein andermal von SplitContainer1.
    Auch SplitContainer1.Invalidate(RcDraw) ist mir verdächtig - da malst du doch garnet drauf - du malst doch auf SplitContainer1.Panel2.
    genau, worüber ich mich gewundert hatte: Wenn du Panel2 bemalen willst, musst du auch konsequent von Panel2 die Events behandeln - der SplitContainer hat nix damit zu tun:

    VB.NET-Quellcode

    1. Private Sub SplitContainer1_Panel2_Paint(sender As Object, e As PaintEventArgs) Handles SplitContainer1.Panel2.Paint
    2. e.Graphics.DrawRectangle(New Pen(Color.Black, PenWidth), RcDraw)
    3. End Sub
    4. Private Sub SplitContainer1_Panel2_MouseDown(sender As Object, e As MouseEventArgs) Handles SplitContainer1.Panel2.MouseDown
    5. RcDraw.X = e.X
    6. RcDraw.Y = e.Y
    7. End Sub
    8. Private Sub SplitContainer1_Panel2_MouseUp(sender As Object, e As MouseEventArgs) Handles SplitContainer1.Panel2.MouseUp
    9. If e.X < RcDraw.X Then
    10. RcDraw.Width = RcDraw.X - e.X
    11. RcDraw.X = e.X
    12. Else
    13. RcDraw.Width = e.X - RcDraw.X
    14. End If
    15. If e.Y < RcDraw.Y Then
    16. RcDraw.Height = RcDraw.Y - e.Y
    17. RcDraw.Y = e.Y
    18. Else
    19. RcDraw.Height = e.Y - RcDraw.Y
    20. End If
    21. Dim lineWidth = CInt(PenWidth)
    22. Dim rct = RcDraw
    23. rct.Inflate(lineWidth, lineWidth)
    24. SplitContainer1.Panel2.Invalidate(rct)
    25. End Sub
    Ah - du hast vmtl gedacht, wenn du die Methoden-Namen änderst, so änderst du damit das betroffene Control.
    Dassis falsch (vb6-Denke).
    Worauf es ankommt ist die Handles-Klausel
    Die Methode kann auch KohlRoulade heissen, und dennoch ihren Job machen:

    VB.NET-Quellcode

    1. Private Sub KohlRoulade(sender As Object, e As PaintEventArgs) Handles SplitContainer1.Panel2.Paint
    2. e.Graphics.DrawRectangle(New Pen(Color.Black, PenWidth), RcDraw)
    3. End Sub
    4. Private Sub MitKlöße(sender As Object, e As MouseEventArgs) Handles SplitContainer1.Panel2.MouseDown
    5. RcDraw.X = e.X
    6. RcDraw.Y = e.Y
    7. End Sub
    (Probiers aus, um dich zu überzeugen, ansonsten ist diese Benamung nicht empfohlen ;) )

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ctextrem Überzeuge Dich im Designer, welchem Control welche Eventhandler zugeordnet sind:
    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!