Я провел некоторые отладки / эксперименты, и кажется, что, хотя мышь остается все еще над управлением, MouseMove на самом деле часто вызывается, а не только когда перемещение элемента управления вызвано некоторым поведением пользовательского интерфейса (прокрутка родительского элемента управления вызывается с помощьюклавиатуры).
Также кажется, что он вызывается дважды каждую секунду (но, вероятно, только когда приложение запускается из VS во время сеанса отладки?), Вызовы разделяются на несколько сотен секунд, и на данный момент я не могу определить, чтовызывает их.
Решение (может быть, не только и не лучшее) состоит в том, чтобы сохранить последнюю позицию курсора и сравнить ее внутри события, чтобы проверить, действительно ли мышь была перемещена из последнего MouseMove вызова.Я добился этого, используя System.Windows.Forms.Cursor.Position
, потому что позиция из MouseEventArgs будет отличаться в зависимости от обстоятельств, но все же будет неубедительным, чтобы определить, был ли перемещен курсор мыши.
Point lastCursorPosition = new Point();
private void panelPictures_MouseMove(object sender, MouseEventArgs e)
{
if (System.Windows.Forms.Cursor.Position != lastCursorPosition)
{
Console.WriteLine("mouse moved");
lastCursorPosition = System.Windows.Forms.Cursor.Position;
}
else
{
Console.WriteLine("mouse in place");
}
}