texto sobre pasar mostrar mensaje eventos event boton c# winforms mouse picturebox

sobre - mousedown c#



¿Cómo puedo detectar un botón del mouse presionado sobre un PictureBox? (6)

Necesito disparar un evento cuando el mouse está sobre un PictureBox con el botón del mouse ya hecho clic y mantenido presionado.

Problemas:

Los controladores de evento MouseDown y MouseEnter no funcionan muy bien.

Por ejemplo, una vez que se hace clic y se mantiene presionado un botón del mouse, C # disparará el manejador de eventos MouseDown, pero cuando el cursor se mueve sobre PictureBox, el evento MouseEnter no se dispara, hasta que se suelta el botón del mouse.


Cuando se presiona el mouse hacia abajo, la mayoría de los controles controlarán. Capture la entrada del mouse. Esto significa que todos los eventos de MouseMove se envían al control original que se capturó en lugar del control por el que pasa el mouse. Esto continúa hasta que el mouse pierda la captura, lo que generalmente sucede con el mouse hacia arriba.

Si realmente necesita saber cuándo el mouse está sobre su control, incluso cuando otro control ha capturado la entrada del mouse, entonces realmente solo tiene una forma. Necesita curiosear los mensajes de Windows destinados a otros controles dentro de su aplicación. Para hacer eso, necesitas agregar un filtro de mensaje ...

Application.AddMessageFilter(myFilterClassInstance);

Luego debe implementar IMessageFilter en una clase adecuada ...

public class MyFilterClass : IMessageFilter { public bool PreFilterMessage(ref Message m) { if (m.Msg == WM_MOUSEMOVE) // Check if mouse is over my picture box! return false; } }

Luego observe los eventos de movimiento del mouse y verifique si están sobre su cuadro de imagen y haga lo que quiera hacer.


Si está intentando implementar una operación de arrastrar y soltar de algún tipo, los eventos Arrastrar ... (DragEnter, DragDrop etc.) en el cuadro de imagen de recepción son los que desea usar. Básicamente, inicia la operación de arrastre utilizando el método DoDragDrop del control de origen, y luego cualquier control que arrastre tendrá sus eventos Arrastrar ... levantados.

Busque "DoDragDrop" en MSDN para ver cómo implementar esto.


establecer una bandera o un estado en el mouse hacia abajo. liberarlo en el mouse hacia arriba. Cuando se enciende el mouse sobre el cuadro de imagen, verifique su estado. Ahora puedes detectar cuando una persona está arrastrando algo.


Configure un evento MouseMove dentro del control PictureBox:

this.myPictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.myPictureBox_MouseMove);

Luego, dentro de su manejador de eventos MouseMove, verifique si se presiona el botón izquierdo del mouse (o lo que sea):

private void myPictureBox_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) // Do what you want to do }


La mejor forma de mover un formulario basado en la posición del mouse y controlar la posición relativa es similar a lo que publicó Ian Campbell.

private void imgMoveWindow_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Form1.ActiveForm.Left = Control.MousePosition.X - imgMoveWindow.Left - (imgMoveWindow.Size.Width/2); Form1.ActiveForm.Top = Control.MousePosition.Y - imgMoveWindow.Top - (imgMoveWindow.Size.Height/2); } }

Donde imgMoveWindow es un PictureBox Control.

Bruno Ratnieks

Sniffer Networks


Eventos del mouse

Utilice el evento MouseDown para detectar solo presionar un botón del mouse y configurar esto. Capture en verdadero para que pueda obtener otros eventos del mouse, incluso cuando el mouse deje el control (es decir, no obtendrá un evento MouseLeave porque capturó el ratón). Libere la captura estableciendo esto. Capture en falso cuando se produce MouseUp.

Simplemente verificando el estado del mouse

Esto puede no ser relevante, pero puede verificar System.Windows.Control.MousePosition y ver si está en el PictureBox.ClientRectangle , luego verifique la propiedad estática Control.MouseButtons para la cual los botones pueden estar caídos en cualquier momento.

Como en:

if (pictureBox.ClientRectangle.Contains(pictureBox.PointToClient(Control.MousePosition))) { if ((Control.MouseButtons & MouseButtons.Left) != 0) { // Left button is down. } }