Когда мышь нажата, большинство элементов управления будут тогда Control.Capture вводить мышью. Это означает, что все события MouseMove отправляются исходному элементу управления, который был захвачен, а не элемент управления, над которым оказывается мышь. Это продолжается до тех пор, пока мышь не потеряет захват, который обычно происходит при наведении мыши вверх.
Если вам действительно нужно знать, когда мышь находится над вашим элементом управления, даже когда другой элемент управления захватил ввод мыши, тогда у вас действительно есть только один способ. Вы должны отслеживать сообщения Windows, предназначенные для других элементов управления внутри вашего приложения. Для этого нужно добавить фильтр сообщений ...
Application.AddMessageFilter(myFilterClassInstance);
Тогда вам нужно реализовать IMessageFilter для подходящего класса ...
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;
}
}
Затем вы наблюдаете за событиями перемещения мыши и проверяете, находятся ли они над вашим графическим блоком, и делаете все, что вы хотите.