.NET Usercontrol Leave seltsames Verhalten
-
21-08-2019 - |
Frage
Ich habe ein Usercontrol (.NET 1.1 WinForms), die eine anklickbare picturebox als Schaltfläche hat.
Da ich viele dieser Benutzersteuerelemente sichtbar zur gleichen Zeit haben, dachte ich, es gut sein könnte, wenn ich nur das Bildfeld angezeigt wird, wenn die Maus über das Usercontrol und verstecken es anders.
so zu tun, behandeln ich die MouseEnter- und Leave Ereignisse des Usercontrol, versteckt und die picturebox anzeigt. Das funktioniert gut.
Aber wenn die klickbare picturebox sichtbar ist, ich bin nicht mehr in der Lage, es zu klicken (der Hand-Cursor ist weg und das Click-Ereignis wird nicht ausgelöst).
Nach einigen Test stelle ich fest, dass, wenn Kommentar alle Inhalte auf der Leave-Handler, der etwas zu tun mit meinem picturebox ... auf diese Weise die picturebox ist anklickbar.
Ich bin das richtige Ereignis nicht verwenden?
Es gibt einen anderen Weg, dies zu erreichen?
Hier ist der Code ...
Private Sub NodoEstablo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.pictAdd.Visible = False
End Sub
Private Sub NodoEstablo_MouseEnters(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
Me.pictAdd.Visible = True
End Sub
Die problematischen Ereignishandler:
Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
Me.pictAdd.Visible = False
End Sub
Update: Wenn ich die picturebox auf Leave (nur etwas zu tun) die Größe es funktioniert. Bisher in der Leave sichtbar und Lage zu ändern mich verhindern für die picturebox klicken. : S
Lösung
Wenn die Maus über Ihren Knopf, etwas Ähnliches wie die folgenden Ereignisse eintritt:
- Die Maus lässt die Usercontrol (auch wenn es noch in der Kontrolle) und tritt in den picturebox
- Ihre
MouseLeave
Event-Handler ausgelöst, so dass die picturebox nicht sichtbar
- Ihre
- Da die picturebox nicht sichtbar ist, lässt die Maus, um den picturebox und tritt in den Usercontrol
- Ihre
MouseEnter
Event-Handler ausgelöst, so dass die picturebox sichtbar
- Ihre
- Da die picturebox jetzt sichtbar ist, beginnt der Prozess von Anfang an über
Wenn ich den Code getestet, flackerte die Taste „“ kontinuierlich (wie es seine Sichtbarkeit umgeschaltet hat gehalten) und konnte nicht sichtbar lange genug bleiben alle Klicks registrieren.
Eine Möglichkeit, dies zu adressieren ist Ihr MouseLeaves
Handler zu ändern, so etwas zu sein:
Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.MouseLeave
If Not ClientRectangle.Contains(PointToClient(Cursor.Position)) Then
Me.pictAdd.Visible = False
EndIf
End Sub
Diese prüft, um sicherzustellen, dass die Maus tatsächlich die Kontrolle verlassen hat, bevor Sie die Taste verschwinden.
Ändern der Größe des picturebox der Zyklus oben skizzierten gebrochen haben, aber es ist nicht das grundlegende Problem lösen.
Hier sind einige andere Dinge (die nichts mit Ihrer Frage zu tun haben) zu berücksichtigen:
- Ich denke, dass es empfohlen, dass Sie nur die
OnMouseLeaves
außer Kraft setzen, etc Methoden in Ihrem Usercontrol, statt auf die entsprechenden Ereignisse abonnieren möchte. - Denken Sie daran, dass die Kontrollen auf diese Weise der Handhabung kann es unmöglich machen, für jemanden, der Ihre Anwendung mit einer Tastatur nur zu verwenden. (Das heißt der Benutzer kann nicht Tab Ihre Taste und drücken Sie Enter )