Zeichen in PictureBox und Aktualisierung

  • VB.NET

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

    Zeichen in PictureBox und Aktualisierung

    Hallo zusammen, ich hoffe auf Eure Hilfe, da ich nur gelegentlich mit VB.NET kleine Projekt mache, bei denen ich dann auch immer wieder meine Grenzen erreiche. Hier also das aktuelle Problem:

    Ich möchte in einer PictureBox, die in einer Form angedockt ist ein Diagramm zeichnen. Bei Größenänderung der Form soll auch das Diagramm angepasst werden. Prinzipiell funktioniert das, jedoch muss zum neuzeichnen des Diagramms die Form erst vom Bildschirm verschwunden sein. Warum wird die nicht automatisch neu gezeichnet mit Paint??? Wo liegt mein Fehler??? ?(

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. PictureBox1.BackColor = Color.WhiteAddHandler PictureBox1.Paint, AddressOf Me.pictureBox1_Paint
    3. Me.ResizeRedraw = True
    4. End SubPrivate Sub Form1_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
    5. Invalidate()
    6. End SubPrivate Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
    7. ' Create a local version of the graphics object for the PictureBox.Dim g As Graphics = e.Graphics()
    8. Dim breite, hoehe As Integer
    9. 'Dim origin, endX, endY As System.Drawing.Point
    10. Me.ResizeRedraw = True
    11. 'Masse des Diagramms bestimmen
    12. breite = PictureBox1.Width
    13. hoehe = PictureBox1.Height
    14. 'Ursprung und Ende der beiden Achsen festlegenDim axes As Point() = {New Point(50, 20), New Point(50, hoehe - 50), New Point(breite - 20, hoehe - 50)}Dim axesPen As New Pen(Color.Black, 2)
    15. g.DrawLines(axesPen, axes)
    16.  
    17. End SubPrivate Sub EndeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EndeToolStripMenuItem.Click
    18. End
    19. End Sub
    20.  Private Sub PictureBox1_SizeChanged(sender As Object, e As EventArgs) Handles PictureBox1.SizeChanged
    21. Invalidate()
    22. End SubPrivate Sub ZeichnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZeichnenToolStripMenuItem.Click
    23. Invalidate()
    24. Update()
    25. End Sub
    26. End Class


    Willkommen im Forum :thumbup:

    Formatiere bitte den Code richtig. Es gibt auch eine Vorschaufunktion. Zum Problem: Pack testweise mal 'nen Timer auf die Form (Intervall=100, Enabled=True) und gib ihm den Code: Me.Invalidate() Sag mir dann bitte genau was passiert.
    Mit freundlichen Grüßen,
    Thunderbolt
    Hallo, zunächst mal danke für die Antworten und sorry für die schlechte Formatierung - ich gelobe Besserung :rolleyes: .

    Zum Vorschlag: der Timer bewirkt leider auch keine Verbesserung. Ich muss die Form immer erst komplett neu zeichnen (z.B. nach minimieren in Taskleiste). Danach wird aber alles sauber neu gezeichnet.

    Kleiner Nachtrag:

    Ich habe jetzt nochmal etwas länger probiert und festgestellt, daß teilweise das Updaten funktioniert, aber nur, wenn ich nach dem Größe ändern die Form verschiebe - aber leider klappt das auch nicht immer. Meist ist es so wie vorher.

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. PictureBox1.BackColor = Color.White
    4. AddHandler PictureBox1.Paint, AddressOf Me.pictureBox1_Paint
    5. Me.ResizeRedraw = True
    6. End Sub
    7. Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
    8. Invalidate()
    9. End Sub
    10. Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
    11. ' Create a local version of the graphics object for the PictureBox.
    12. Dim g As Graphics = e.Graphics()
    13. Dim breite, hoehe As Integer
    14. 'Dim origin, endX, endY As System.Drawing.Point
    15. Me.ResizeRedraw = True
    16. 'Masse des Diagramms bestimmen
    17. breite = PictureBox1.Width
    18. hoehe = PictureBox1.Height
    19. 'Ursprung und Ende der beiden Achsen festlegen
    20. Dim axes As Point() = {New Point(50, 20), New Point(50, hoehe - 50), New Point(breite - 20, hoehe - 50)}
    21. Dim axesPen As New Pen(Color.Black, 2)
    22. g.DrawLines(axesPen, axes)
    23. End Sub
    24. Private Sub EndeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EndeToolStripMenuItem.Click
    25. End
    26. End Sub
    27. Private Sub PictureBox1_SizeChanged(sender As Object, e As EventArgs) Handles PictureBox1.SizeChanged
    28. Invalidate()
    29. End Sub
    30. Private Sub ZeichnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZeichnenToolStripMenuItem.Click
    31. Invalidate()
    32. Update()
    33. End Sub
    34. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    35. Me.Invalidate()
    36. End Sub
    37. End Class