Pregunta

Tengo un control de usuario (NET 1.1 Windows Forms) que tiene un cuadro de imagen puede hacer clic como un botón.

Desde que tengo un montón de esos controles de usuario visibles al mismo tiempo, pensé que podría ser bueno si simplemente mostrar el cuadro de imagen cuando el ratón está sobre el control de usuario y esconderlo lo contrario.

Para hacerlo, controlar los eventos MouseEnter y MouseLeave del control de usuario, ocultar y mostrar el cuadro de imagen. Eso funciona bien.

Sin embargo, cuando el cuadro de imagen puede hacer clic es visible ya que no soy capaz de hacer clic en él (el cursor de mano se ha ido y el evento click no está disparando).

Después de algunas pruebas, me doy cuenta de que si todo el contenido de comentario el manejador MouseLeave que hacer algo con mi cuadro de imagen ... de esta manera el cuadro de imagen se puede hacer clic.

No estoy usando el evento correcto?

Hay otra manera de lograr esto?

Aquí está el código ...

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

El controlador de eventos problemáticos:

Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
    Me.pictAdd.Visible = False
End Sub

Actualización: Si puedo cambiar el tamaño del cuadro de imagen en MouseLeave (sólo para hacer algo) que funciona. Hasta ahora, el cambio visible y ubicación en el MouseLeave me impiden por haga clic en el cuadro de imagen. : S

¿Fue útil?

Solución

Cuando se mueve el ratón sobre el botón, algo similar a lo ocurre lo siguiente:

  1. El ratón sale del usercontrol (a pesar de que todavía está dentro del control) y entra en el cuadro de imagen
    • Sus MouseLeave incendios de controlador de eventos, por lo que el cuadro de imagen no visible
  2. Debido a que el cuadro de imagen no es visible, el ratón sale del cuadro de imagen y entra en el usercontrol
    • Sus MouseEnter incendios de controlador de eventos, por lo que el cuadro de imagen visible
  3. Debido a que el cuadro de imagen es ahora visible, el proceso comienza de nuevo desde el principio

Cuando probé el código, el "botón" parpadeaba continuamente (ya que mantenía con su visibilidad alternar) y era incapaz de permanecer visible el tiempo suficiente para registrar los clics.

Una manera de abordar esto es para modificar su MouseLeaves manejador a ser algo como esto:

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

Esto comprueba para asegurarse de que el ratón en realidad haya dejado el control antes de hacer desaparecer el botón.

Cambiar el tamaño del cuadro de imagen puede haber roto el ciclo ha indicado anteriormente, pero no aborda el problema fundamental.

Aquí están algunas otras cosas (que no tienen nada que ver con su pregunta) a tener en cuenta:

  • Creo que es recomendable que usted acaba de anular el OnMouseLeaves, métodos, etc en su control de usuario, en lugar de suscribirse a los eventos correspondientes.
  • Recuerde que el manejo de los controles de esta manera puede hacer que sea imposible que alguien pueda utilizar la aplicación, con sólo un teclado. (Es decir, el usuario no puede Tab a su botón y presione Intro )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top