Pregunta
Tengo una aplicación que abre un formulario modal con el método ShowDialog. Una vez que se muestra este formulario, quiero capturar el movimiento del mouse incluso si el cursor está fuera del formulario. ¿Cómo puedo capturar el movimiento del mouse? Vi algo con la propiedad Capture pero no puedo lograr que funcione.
[editar]
Deseo recibir una notificación si el mouse se mueve fuera del formulario.
Solución
La propiedad Capture
es la forma correcta, pero hay algunas limitaciones.
- Solo la ventana de primer plano puede capturar el mouse
- La captura del mouse puede ser deshabilitada por otras partes del sistema
- La función Win32 API
SetCapture
se restablece cada vez que un "mouse up" evento ocurre Supongo que eso también se aplica a .NET.
Consulte la sección de comentarios de la propiedad Capture
.
Cuando se captura el mouse, recibirá los eventos habituales pero con un rango de coordenadas del mouse más amplio (por ejemplo, una posición X negativa, si el mouse queda fuera del control de captura)
La captura del mouse es frágil, debido a su naturaleza global. Compruebe si hay otras formas de manejar ciertos eventos. Quizás los eventos MouseLeave
o MouseEnter
sean suficientes en su caso.
Otros consejos
Puede usar la propiedad estática Control.MousePosition .
Puede leer la posición del cursor, utilizando la propiedad Cursor.Position, consulte Cursor.Position