2011-08-27 41 views
6

Los títulos lo dicen todo. Tengo un panel que actúa como una pizarra blanca. Al mover el mouse, dibuje la pista del mouse ... funciona bien, pero si el mouse deja los bordes del panel, quiero llamar al evento mouse up y mouse down si el mouse sale de o ingresa el panel mientras se hace clic en el botón izquierdo El evento C# mouseleave y mouseenter no se activará si se hace clic en el botón del mouse

private void panel2_MouseLeave(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseUp(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

    private void panel2_MouseEnter(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseDown(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

mousedraw es un bool saber si se hace clic en el botón izquierdo.

El problema es:

El entrar y salir de los acontecimientos no se disparará si el botón del ratón está presionado.

+0

Esto es un efecto secundario para la clase de base de control que establece la propiedad Capturar en verdadero en el evento de mouse abajo. Esto no * necesita * fijación, dibujar fuera del control. Bounds no aparece de todos modos. –

Respuesta

7

MouseEnter y mouseLeave No dispare mientras se pulsa un botón. Sin embargo, cuando el botón se libera finalmente, el mouseEther mouse o mouseLeave apropiado se dispara si el mouse se movió dentro o fuera del panel mientras el botón estaba presionado. Siempre que se presione el botón, el evento mouseMove continuará disparando, incluso fuera de los límites del panel. Esto permite que el mouse continúe arrastrando o lo que sea, incluso después de que pase fuera del límite del control, y es la forma en que funcionan la mayoría de las aplicaciones de Windows.

Si puede utilizar este comportamiento en su aplicación, será una interfaz de usuario más "estándar".

Si definitivamente necesita activar un mouseUp cuando el mouse sale del panel, puede verificar la ubicación del mouse en el evento mouseMove y llamar a mouseUp siempre que esté fuera del panel y se presione el botón. En el manejador de MouseMove puede usar e.X y e.Y para la ubicación, y e.Button para el estado del botón.

Cuando se presiona el botón del mouse fuera del control y se mueve dentro, el panel no tiene jurisdicción sobre el mouse, porque se considera que el mouse se mueve en la forma o control en el que estaba cuando se presionó el botón. Por lo tanto, es posible que tenga problemas para hacer que MouseDown se dispare cuando se presiona el botón del mouse fuera del panel y luego se mueve dentro del panel.

+0

gracias, que fue informativo y útil, ahora veo que la solución que busco no es tan simple como pensaba, si (cuando) Me encargo de esto, publicaré la solución aquí para que otros hagan comentarios y se beneficien. – Osama

-1

Yo creo donnt [mousedraw] podría hacer bien

click = mouseDown + mouseUp 

así,

When mouseDown : mousedraw = false; 

When mouseUp : mousedraw = true; 
+0

tal vez no he explicado lo suficiente, o no te entiendo. [mousedraw] es un bool que se cambia cada vez que se golpea un mouse o eventos de mouse hacia arriba, por lo que con el mouse establezco mousedraw en verdadero y con el mouse lo configuro en falso. – Osama

+0

No entiendo cómo debería usarse esto, tal vez debería agregar alguna explicación – Breeze

Cuestiones relacionadas