UserControl - MouseEnter/MouseLeave für alle Untercontrols?!

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von TRiViUM.

    UserControl - MouseEnter/MouseLeave für alle Untercontrols?!

    Hi liebe Community,

    ich habe ein Usercontrol, welches von außen hin wie ein Panel sein soll:
    MouseEnter-Event: Backcolor soll sich ändern
    MouseLeave-Event: Backcolor soll sich "zurück ändern"

    Nun besitzt mein UserControl aber eine Picturebox und ein Label.
    Wenn ich mit dem Mauszeiger nur auf dem Hintergrund-Bereich des Usercontrols bleibe, funktioniert alles.
    Komme ich aber z.B. auf die Picturebox oder auf das Label, ändert sich die Hintergrundfarbe wieder "zurück".

    Gewollt ist hier, wie oben beschrieben, das Verhalten wie ein Panel (Der Inhalt meines Usercontrols soll wie "eins" betrachtet werden).

    Kann man dies ohne lästige Nachprogrammierung für alle Untercontrols umgehen?

    Danke für eure Hilfe :)
    mir fallen grad nur 2 Möglichkeiten ein:
    • das lästige Nach-Programmieren - das kann man mit Geschick auch in einer Methode abhandeln, die man pro Main-Ucl einmal aufruft
    • mittm IMessageFilter - Interface - damit kann man einen Filter bauen für alle WindowMessages der gesamten Anwendung.
      etwas heikel, weil der eben viiieel mehr Messages untersucht als eiglich nötig.
      Ausserdem nicht ganz einfach zu coden
    http://www.activevb.de/cgi-bin/tippupload/show/19/Net_SubClassing_mit_dem_IMessageFilter_Interface

    Ah - ich glaub ich hab das zu Zeiten ganz doof gelöst: mittm Timer.
    Der hat regelmäßig (zb 300ms reicht) nachgeguckt, wo die Maus denn nu ist, und wenn über eim bestimmten Rechteck hab ich meine Einstellung getätigt - falls sie nicht bereits richtig sind.

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

    ErfinderDesRades schrieb:

    das kann man mit Geschick auch in einer Methode abhandeln, die man pro Main-Ucl einmal aufruft

    Stimmt, denke so ist es einer der besten Wege, da nur das, was nötig ist, gemacht wird.
    Mit'm Timer geht's zwar auch, aber Event-Basiert ist es meines Erachtens nach richtiger, bzw. mit ner intelligenten Methode.

    Das mit dem IMessageFilter - Interface hab ich mir mal angeschaut, das werde ich bestimmt in der ein oder anderen Anwendung mal gebrauchen können...
    Aber mich stört für das Usercontrol, dass er eben alle (auch die, die ich gar nicht brauche) durchsucht...


    Danke für die Hilfe :saint:
    Und wenn Du im MouseLeave-Ereignis prüfst, ob sich die Maus noch im Rahmen des UCs befindet? Also Vergleich mit Maßen und Position und erst dann die Farbe auf LeaveFarbe änderst, wenn die Maus außerhalb des Rahmens ist?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Und wenn Du im MouseLeave-Ereignis prüfst, ob sich die Maus noch im Rahmen des UCs befindet? Also Vergleich mit Maßen und Position und erst dann die Farbe auf LeaveFarbe änderst, wenn die Maus außerhalb des Rahmens ist?

    Danke für Deinen Hinweis, ist ne gute Idee ;)

    Edit:
    Ich hab's doch anders gelöst, nämlich über den Event-Handler des Usercontrols:

    VB.NET-Quellcode

    1. Private Sub UserControl1_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter, Label1.MouseEnter, PictureBox1.MouseEnter
    2. '...
    3. End Sub

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „TRiViUM“ ()