Вопрос
У меня есть приложение, которое открывает модальную форму с помощью метода ShowDialog.После отображения этой формы я хочу зафиксировать движение мыши, даже если курсор находится за пределами формы.Как я могу захватить движение мыши?Я видел что-то со свойством Capture, но не могу заставить его работать.
[редактировать]
Я хочу получать уведомления, если мышь выйдет за пределы формы.
Решение
В Capture
property — правильный путь, но есть некоторые ограничения.
- Только окно переднего плана может захватывать мышь.
- Захват мыши можно отключить в других частях системы.
- Функция Win32 API
SetCapture
сбрасывается каждый раз, когда происходит событие «мышь вверх».Я предполагаю, что это также относится и к .NET.
См. раздел примечаний из Capture
свойство.
Когда мышь будет захвачена, вы получите обычные события, но с более широким диапазоном координат мыши (например, отрицательное положение X, если мышь находится слева от элемента управления захватом).
Захват мыши ненадежен из-за его глобального характера.Проверьте, есть ли другие способы обработки определенных событий.Возможно, MouseLeave
или MouseEnter
событий достаточно в вашем случае.
Другие советы
Вы можете просто использовать статическое свойство Control.MousePosition.
Вы можете прочитать положение курсора, используя свойство Cursor.Position, см. Курсор.Позиция