Vaiable für FillEllipse

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von FreShmaKer.

    Vaiable für FillEllipse

    Haii Leute :D

    Ich möchte gerne eine Variable für das Paint-Event erstellen. Das Paint-Event könnt ihr nachbenannt ansehen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Startseite_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. If IsKreisGrün() Then
    3. Dim circle As Graphics = e.Graphics
    4. circle.FillEllipse(Brushes.Green, 10, 239, 10, 10)
    5. legalinfo.Text = "Kreis ist grün"
    6. tripadmin.Enabled = True
    7. circle.Dispose()
    8. Else
    9. Dim circle As Graphics = e.Graphics
    10. circle.FillEllipse(Brushes.Red, 10, 239, 10, 10)
    11. legalinfo.Text = "Kreis ist rot"
    12. circle.Dispose()
    13. End If
    14. End Sub
    15. Private Sub Startseite_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    16. Me.Invalidate()
    17. End Sub


    Nun geht es mir darum, dass ich das bereits vorhandene Paint-Event (während die Form aktiv ist) per Button_Click in eine andere Farbe ändern kann. Das scheint nicht einfach durch ein Button-Click möglich zu sein. Ich habe es wie folgt probiert.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. If Button1.CanSelect Then
    2. Dim circle As Graphics = e.Graphics
    3. circle.FillEllipse(Brushes.Blue, 10, 239, 10, 10)
    4. End If



    Vielen Dank für eure Hilfen!
    Da ich mit "GDI+" erst begonnen habe zu arbeiten, weiß ich so recht nicht weiter. Auch habe ich mir die Seite zum Nutzen gemacht, jedoch das Neuzeichnen einer Grafik nicht ganz auf mein Projekt umlegen können.


    Spoiler anzeigen
    Die Form dann mit "Me.Refresh" neuzuladen, das wäre auch meine Interpretation. Mir geht es lediglich um das Zerstören der Grafik und dann der Neuerung.

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

    Richtig. Nur wird bei dem CheckBox_CheckedChange-Event der Kreis in seiner Farbe nicht mehr geändert, nachdem er bereits im Paint-Event gezeichnet wurde.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Startseite_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. If IsUserAdmin() Then
    3. Dim circle As Graphics = e.Graphics
    4. circle.FillEllipse(Brushes.Green, 10, 239, 10, 10)
    5. tripadmin.Enabled = True
    6. circle.Dispose()
    7. Else
    8. Dim circle As Graphics = e.Graphics
    9. circle.FillEllipse(Brushes.Red, 10, 239, 10, 10)
    10. circle.Dispose()
    11. End If
    12. If CheckBox1.Checked Then
    13. Me.Refresh()
    14. Dim circle As Graphics = e.Graphics
    15. circle.FillEllipse(Brushes.Blue, 10, 239, 10, 10)
    16. circle.Dispose()
    17. Else
    18. End If
    19. End Sub



    Als Fehler erhalte ich: "Ungültige Parameter." Die Form wird neugeladen, der Kreis ist nicht mehr sichtbar.
    Du hättest vorgestern etwas besser aufpassen sollen.
    Pass auf, bei wem Du abschreibst.
    Refresh gehört nicht ins Paint-Event. Das übergebene Graphics-Argument wird nicht disposed.
    Immer noch schlecht, aber läuft:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Startseite_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    3. Dim circle As Graphics = e.Graphics
    4. If CheckBox2.Checked Then
    5. circle.FillEllipse(Brushes.Green, 10, 239, 10, 10)
    6. tripadmin.Enabled = True
    7. ElseIf CheckBox1.Checked Then
    8. circle.FillEllipse(Brushes.Red, 10, 239, 10, 10)
    9. Else
    10. circle.FillEllipse(Brushes.Blue, 10, 239, 10, 10)
    11. End If
    12. End Sub
    13. Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged
    14. Me.Refresh()
    15. End Sub
    16. End Class
    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!
    Wenn Du mehrere Code Snippets bekommst, solltest Du, wenn Du sie nicht verstehst, zumindest in ein kleines Testprogrann einfügen und ausprobieren.
    Dann solltest Du wissen, wie man debuggt, also Haltepunkt, Variablen ansehen und verfolgen, Rückschlüsse ziehen.
    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!
    Ich bin froh, dass ich die Codes nicht einfach kopiere. Ich übernehme gewissen Zeilen, jedoch gestalte ich sie mir dann selbst. Der Code hat so im Übrigen funktioniert.

    Ich dachte zunächst, ein neues Event erstellen zu müssen, wobei mir die genannte Idee auch ganz Recht ist.


    Vielen Dank Dir! :D
    Hab ich irgendwie die Möglichkeit abzufragen, ob ein Kreis vorhanden ist bzw. in welcher Farbe?

    Ich habe nun 3 Kreise und möchte, dass in Verbindung mit einem Timer der letzte Kreis (bei gecheckter CheckBox) blinkt.

    VB.NET-Quellcode

    1. Private Sub Startseite_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. Dim aktiv As Graphics = e.Graphics
    3. Dim inaktiv As Graphics = e.Graphics
    4. Dim damage As Graphics = e.Graphics
    5. If IsUserAdmin() Then
    6. aktiv.FillEllipse(Brushes.Green, 10, 239, 10, 10)
    7. inaktiv.FillEllipse(Brushes.Gray, 21, 239, 10, 10)
    8. damage.FillEllipse(Brushes.Gray, 32, 239, 10, 10)
    9. tripadmin.Enabled = True
    10. Else
    11. End If
    12. If CheckBox1.Checked Then
    13. aktiv.FillEllipse(Brushes.Gray, 10, 239, 10, 10)
    14. inaktiv.FillEllipse(Brushes.Red, 21, 239, 10, 10)
    15. damage.FillEllipse(Brushes.Yellow, 32, 239, 10, 10)
    16. End If
    17. End Sub



    Ich würde zunächst mit einer Visible (True/False) Funktion arbeiten, wobei dies im Paint Event nicht möglich ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FreShmaKer“ ()

    Viel gelernt hast Du in diesem Thread noch nicht. :S
    Blinken: im Timer-Takt, nach Timer.Start

    VB.NET-Quellcode

    1. Private blink As Boolean = False
    2. Private Sub Startseite_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    3. Dim g As Graphics = e.Graphics
    4. If blink Then
    5. g.FillEllipse(Brushes.Gray, 10, 239, 10, 10)
    6. g.FillEllipse(Brushes.Red, 21, 239, 10, 10)
    7. g.FillEllipse(Brushes.Yellow, 32, 239, 10, 10)
    8. End If
    9. End Sub
    10. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    11. blink = Not blink
    12. Invalidate()
    13. 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!

    RodFromGermany schrieb:

    Und? Blinken die Kreise?

    So. Ich habe es heute geschafft, den Code einmal auszuprobieren. Dabei habe ich festgestellt, wenn ich deinen Code 1:1 übernehme, es funktioniert. Ich habe es mit ff. Code probiert, jedoch funktioniert es nicht.

    Timer-Tick Event
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. guest = Not guest
    3. Invalidate()
    4. End Sub


    Paint Event
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private guest As Boolean = False
    2. Private Sub Startseite_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    3. Dim damage As Graphics = e.Graphics
    4. If IsUserAdmin() Then
    5. damage.FillEllipse(Brushes.Gray, 32, 239, 10, 10)
    6. End If
    7. If CheckBox1.Checked Then
    8. damage.FillEllipse(Brushes.Red, 32, 239, 10, 10)
    9. End If
    10. End Sub


    CheckBox-Changed Event
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    2. Me.Refresh()
    3. End Sub



    Woran könnte es liegen RodFromGermany? Welche Rolle spielt der Wert "Invalidate"?
    Welche Rolle spielt bei Dir die Variable guest? Ich sehe nicht, dass Du sie auswertest.
    Invalidate löst ein Paint-Event aus, mit überladenen Funktionen kannst Du ein Neuzeichnen positionieren.
    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!
    Na fein.
    Läuft nun alles oder gibt es noch Probleme?
    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!