Использование событий мыши (Windows Forms .NET)
Большинство программ Windows Forms обрабатывают входные данные мыши, обрабатывая события мыши. В этой статье представлен обзор событий мыши, включая сведения об использовании каждого события и данных, предоставляемых для каждого события. Дополнительные сведения о событиях в целом см. в обзоре событий (Windows Forms .NET).
События мыши
Основным способом реагирования на входные данные мыши является обработка событий мыши. В следующей таблице показаны события мыши и объясняется, когда они вызываются.
Событие мыши | Описание |
---|---|
Click | Это событие возникает при выпуске кнопки мыши, обычно перед событием MouseUp. Обработчик этого события получает аргумент типа EventArgs. Обработайте это событие, если необходимо определить, когда происходит только щелчок. |
MouseClick | Это событие возникает, когда пользователь щелкает элемент управления мышью. Обработчик этого события получает аргумент типа MouseEventArgs. Обработайте это событие, когда необходимо получить сведения о мыши при нажатии кнопки. |
DoubleClick | Это событие возникает при двойном щелчке элемента управления. Обработчик этого события получает аргумент типа EventArgs. Обработайте это событие, если необходимо определить, когда происходит двойной щелчок. |
MouseDoubleClick | Это событие возникает, когда пользователь дважды щелкает элемент управления мышью. Обработчик этого события получает аргумент типа MouseEventArgs. Обработайте это событие, когда необходимо получить сведения о мыши при двойном щелчке. |
MouseDown | Это событие возникает, когда указатель мыши находится на элементе управления, и пользователь нажимает кнопку мыши. Обработчик этого события получает аргумент типа MouseEventArgs. |
MouseEnter | Это событие возникает, когда указатель мыши входит в границу или клиентскую область элемента управления, в зависимости от его типа. Обработчик этого события получает аргумент типа EventArgs. |
MouseHover | Это событие возникает, когда указатель мыши останавливается и задерживается над элементом управления. Обработчик этого события получает аргумент типа EventArgs. |
MouseLeave | Это событие возникает, когда указатель мыши покидает границу или клиентская область элемента управления в зависимости от типа элемента управления. Обработчик этого события получает аргумент типа EventArgs. |
MouseMove | Это событие возникает при перемещении указателя мыши во время его перемещений над элементом управления. Обработчик этого события получает аргумент типа MouseEventArgs. |
MouseUp | Это событие возникает, когда указатель мыши находится на элементе управления, и пользователь освобождает кнопку мыши. Обработчик этого события получает аргумент типа MouseEventArgs. |
MouseWheel | Это событие возникает, когда пользователь поворачивает колесико мыши, пока элемент управления имеет фокус. Обработчик этого события получает аргумент типа MouseEventArgs. Вы можете использовать свойство DeltaMouseEventArgs, чтобы определить, насколько далеко прокручена мышь. |
Сведения о мыши
MouseEventArgs отправляется обработчикам событий мыши, связанным с нажатием кнопки мыши и отслеживанием движений мыши. MouseEventArgs предоставляет сведения о текущем состоянии мыши, включая расположение указателя мыши в клиентских координатах, на которых нажимаются кнопки мыши, и о том, прокручивается ли колесико мыши. Несколько событий мыши, таких как те, которые возникают при вводе указателя мыши или оставлении границ элемента управления, отправляют EventArgs обработчику событий без дополнительных сведений.
Если вы хотите знать текущее состояние кнопок мыши или расположение указателя мыши, и вы хотите избежать обработки события мыши, можно также использовать свойства MouseButtons и MousePosition класса Control. MouseButtons возвращает сведения о том, какие кнопки мыши в настоящее время нажимаются. MousePosition возвращает координаты экрана указателя мыши и эквивалентен значению, возвращаемого Position.
Преобразование между координатами экрана и клиента
Так как некоторые сведения о расположении мыши расположены в клиентских координатах, а некоторые — в координатах экрана, может потребоваться преобразовать точку из одной системы координат в другую. Это можно сделать с помощью PointToClient и PointToScreen методов, доступных в классе Control.
Стандартное поведение события щелчка
Если вы хотите обрабатывать события щелчка мыши в правильном порядке, необходимо знать порядок, в котором события щелчка создаются в элементах управления Windows Forms. Все элементы управления Windows Forms вызывают события щелчка в том же порядке, когда любая поддерживаемая кнопка мыши нажимается и освобождается, за исключением случаев, когда указано в следующем списке для отдельных элементов управления. В следующем списке показано порядок событий, вызванных одним щелчком мыши:
- событие MouseDown.
- событие Click.
- событие MouseClick.
- событие MouseUp.
Порядок событий, вызванных двойным щелчком кнопкой мыши, следующий:
событие MouseDown.
событие Click.
событие MouseClick.
событие MouseUp.
событие MouseDown.
событие DoubleClick.
Это может отличаться в зависимости от того, имеет ли элемент управления бит стиля StandardDoubleClick значение
true
. Дополнительные сведения о том, как настроить бит ControlStyles, см. в методе SetStyle.Мероприятие MouseDoubleClick.
событие MouseUp.
Отдельные элементы управления
Следующие элементы управления не соответствуют стандартному поведению событий щелчка мыши:
-
Заметка
Для элемента управления ComboBox поведение события, подробно описанное позже, происходит, если пользователь щелкает поле редактирования, кнопку или элемент в списке.
- Щелчок левой кнопкой: Click, MouseClick
- Щелкнуть правой кнопкой мыши: события щелчка не вызываются
- Слева дважды щелкните: Click, MouseClick; Click, MouseClick
- Двойной щелчок правой кнопкой мыши: события щелчка не вызываются
TextBox, RichTextBox, ListBox, MaskedTextBoxи CheckedListBox элементы управления
Заметка
Поведение события, подробно описанное позже, происходит, когда пользователь щелкает в любом месте этих элементов управления.
- Щелкните левой кнопкой мыши: Click, MouseClick
- щелкните правой кнопкой мыши: события щелчка не вызываются
- Слева дважды щелкните: Click, MouseClick, DoubleClick, MouseDoubleClick
- двойной щелчок правой кнопкой мыши: события щелчка не возникают
контроллер ListView
Заметка
Поведение события, описанное далее, возникает только в том случае, если пользователь щелкает на объекты элемента управления ListView. События не генерируются для щелчков где-либо еще на элементе управления. Помимо описанных далее событий, существуют события BeforeLabelEdit и AfterLabelEdit, которые могут быть интересны для вас, если вы хотите использовать проверку с элементом управления ListView.
- Левый щелчок: Click, MouseClick
- щелкните правой кнопкой мыши: Click, MouseClick
- Слева дважды щелкните: Click, MouseClick; DoubleClick, MouseDoubleClick
- правый двойной щелчок: Click, MouseClick; DoubleClick, MouseDoubleClick
Контроллер TreeView
Заметка
Поведение события, описанное ниже, происходит только в том случае, если пользователь щелкает непосредственно по элементам или справа от них в управляющем элементе TreeView. События не инициируются при щелчках в каких-либо других местах элемента управления. В дополнение к событиям, описанным далее, существуют события BeforeCheck, BeforeSelect, BeforeLabelEdit, AfterSelect, AfterCheckи AfterLabelEdit, которые могут представлять для вас интерес, если вы хотите использовать проверку с элементом управления TreeView.
- Щелкните левой кнопкой мыши: Click, MouseClick
- щелкните правой кнопкой мыши: Click, MouseClick
- Слева дважды щелкните: Click, MouseClick; DoubleClick, MouseDoubleClick
- двойной щелчок правой кнопкой мыши: Click, MouseClick; DoubleClick, MouseDoubleClick
Поведение рисования элементов управления переключателем
Переключатель элементов управления, например элементы управления, производные от класса ButtonBase, имеют следующее отличительное поведение рисования в сочетании с событиями щелчка мыши:
Пользователь нажимает кнопку мыши.
Элемент управления отображается в нажатом состоянии.
Инициируется событие MouseDown.
Пользователь освобождает кнопку мыши.
Элемент управления отображается приподнятым.
Вызывается событие Click.
Вызывается событие MouseClick.
Вызывается событие MouseUp.
Заметка
Если пользователь перемещает указатель из элемента управления переключателем во время нажатия кнопки мыши (например, перемещение мыши от элемента управления Button во время нажатия), элемент управления переключателя будет отображаться в поднятом состоянии, и происходит только событие MouseUp. События Click или MouseClick не будут возникать в этой ситуации.
См. также
.NET Desktop feedback