Panel färben bei Mouseover

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Panel färben bei Mouseover

    Hallo,

    auf einer Form habe ich untereinander fünf rechteckige Panels platziert. Bei Mouseover soll das jeweils darunterliegende Panel die Farbe wechseln und beim Anklicken eine dritte Farbe "dauerhaft" annehmen.
    Könnt Ihr helfen?

    ^^ Danke sagt der Vielfrager... ^^

    VB.NET-Quellcode

    1. 'Wenn Maus über Panel bewegt wird
    2. Private Sub Panel1_MouseMove () Handles Panel1.Click
    3. Panel1.BackColor = 'Deine gewünschte Farbe
    4. End Sub
    5. 'Danke FloFuchs!!!
    6. Private Sub Panel1_MouseMove () Handles Panel1.Click
    7. Panel1.BackColor = 'Deine gewünschte Farbe
    8. End Sub
    9. 'Wenn Maus nicht im Panel ist
    10. Private Sub Panel1_MouseMove () Handles Panel1.Click
    11. Panel1.BackColor = 'Deine gewünschte Farbe
    12. End Sub
    13. 'Wenn Maus im Panel Klickt
    14. Private Sub Panel1_Click () Handles Panel1.Click
    15. Panel1.BackColor = 'Deine gewünschte Farbe
    16. End Sub


    Edit by der_Kurt: "betteln" um "Hilfreich" entfernt

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

    naja das wird nicht reichen....
    du musst wohl was in mehrere events schreiben...
    quasi beim Eintritt...
    Mouse_enter
    Farbe = lilö
    end
    mouse_click
    Farbe = herschblogel
    end
    mouse_leave
    falls nich rein geklickt wurde, setz die farbe wieder zurück
    end
    @chipPro,
    hattste heut noch nix zu Essen oder biste bedrunken?
    Deine Events sind alle identisch und haben mit Mousover nix am Hut.

    @TE
    Nutze das MouseEnter, Mouseleave und das MouseDown-Event der Panels.
    MouseEnter = Maus "betritt" das Control >> Ursprungsfarbe zwischenspeichern, Farbe 1 setzen.
    MouseDown = Maustaste betätigt >> Farbe 2 setzen, gespeicherte Ursprungsfarbe verwerfen.
    MouseLeave = Maus verlässt das Control >> Wenn Control Farbe 2 hat dann nix tun; Sonst gespeicherte Ursprungsfarbe setzen.

    Pfiffigerweise solltest du nicht für jedes Panel eine neue Eventsub schreiben, sondern in der Handles Klausel alle Panelxy.bumsdingsevent mit Komma getrennt dahinterschreiben. Der Parameter Sender gibt dir die Eventauslösende Instanz bekannt. Die ist vom Typ Objekt und muß mit DirectCast in ein Panel gewandelt werden.

    VB.NET-Quellcode

    1. DirectCast ( Sender, Panel).BackColor=Color.Gritzegrün


    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Danke, speziell an OppaVatter...

    Prinzipiell funktionierts, allein fehlt mir das Verständnis, warum... :D

    Im Beispieltext nimmt das Panel nach Mousedown bei Verlassen logischerweise die Ursprungsfarbe an. Wie kann ich das umgehen? Und dann haperts noch mit der Syntax, was die Einbindung von Panel2-5 betrifft. Kann das irgendjemand bitte ergänzen (ohne gemäß OppaVatter-Empfehlung weitere Subs anzulegen)?

    Danke

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load
    3. Panel1.BackColor = Color.Gainsboro
    4. End Sub
    5. Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As EventArgs) Handles Panel1.MouseEnter
    6. DirectCast(sender, Panel).BackColor = Color.Yellow
    7. End Sub
    8. Private Sub Panel1_Paint2(ByVal sender As System.Object, ByVal e As EventArgs) Handles Panel1.MouseLeave
    9. DirectCast(sender, Panel).BackColor = Color.Gainsboro
    10. End Sub
    11. Private Sub Panel1_Paint3(ByVal sender As System.Object, ByVal e As EventArgs) Handles Panel1.MouseDown
    12. Panel1.BackColor = Color.Fuchsia
    13. End Sub
    14. End Class

    vielfrager schrieb:

    bleibt einzig das Halten der Farbe
    Da musst Du Dir in der Klasse eine MyBackColor-Variable/Property reinschreiben, und immer, wenn ein Ausgangszustand verlangt wird, die dann dem Panel setzen.
    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!