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

War es hilfreich?

Lösung

Wenn die Maus über Ihren Knopf, etwas Ähnliches wie die folgenden Ereignisse eintritt:

  1. 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
  2. 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
  3. 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 )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top