События мыши в формах Windows Forms
При обработке ввода мыши обычно необходимо знать положение указателя и состояние кнопок мыши. В этом разделе приводится информация о получении этих сведений из событий мыши и описывается порядок, в котором вызываются события щелчка мыши в элементах управления Windows Forms. Список и описание всех событий мыши см. в разделе Осуществление ввода мышью в Windows Forms. Дополнительные сведения см. в следующем разделе. Обзор обработчиков событий (Windows Forms) и Общие сведения о событиях (Windows Forms) и Обзор обработчиков событий (Windows Forms) и Общие сведения о событиях (Windows Forms).
Сведения о мыши
Объект 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.
Пример кода, который демонстрирует порядок событий щелчка мыши, см. в разделе Практическое руководство. Обработка событий пользовательского ввода в элементах управления Windows Forms.
Специальные элементы управления
Поведение следующих элементов управления не соответствуют стандартному поведению события при щелчке мыши.
Элементы управления Button, CheckBox, ComboBox и RadioButton
Примечание
Если пользователь щелкает поле редактирования, кнопку или элемент в списке, то для элемента управления 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 в этой ситуации не возникают.