Cuando el ratón se presiona hacia abajo la mayoría de los controles será entonces Control.Capture la entrada del ratón. Esto significa que todos los eventos 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 cuando el mouse está sobre su control, incluso cuando otro control ha capturado la entrada del mouse, solo tiene una manera. Necesita curiosear los mensajes de Windows destinados a otros controles dentro de su aplicación. Para ello es necesario añadir un filtro de mensajes ...
Application.AddMessageFilter(myFilterClassInstance);
Luego hay que poner en práctica el 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;
}
}
Entonces detectar eventos de movimiento del ratón y compruebe si están sobre tu cuadro de imagen y haz lo que sea que quieras hacer.
muuuy cerca !! Borrar this.capture funciona para MouseLeave, pero no MouseEnter (de otro PictureBox) –
No entendí completamente lo que intentabas lograr, así que no, esto no funcionará desafortunadamente. –