События мыши в формах 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, кроме отмеченных в списке ниже, вызывают события щелчка в одном и том же порядке. Ниже приведен порядок событий, вызываемых одинарным щелчком мыши.
Ниже приведен порядок событий, вызываемых двойным щелчком мыши.
Click .
MouseUp .
DoubleClick . (Может изменяться в зависимости от того, установлено ли для бита стиля StandardDoubleClick элемента управления значение
true
. Подробнее о настройке бита ControlStyles см. в разделе, посвященном методу SetStyle.)MouseUp .
Пример кода, который демонстрирует порядок мыши события щелчка мыши, см. в разделе как: Дескриптор пользовательского ввода, события в Windows Forms, элементы управления.
Особые элементы управления
Поведение перечисленных ниже элементов управления при щелчке мыши не соответствует стандартному.
Button, CheckBox, ComboBox, и RadioButton элементов управления
Note
Если пользователь щелкает поле редактирования, кнопку или элемент в списке, то для элемента управления ComboBox возникают описанные ниже события.
Щелчок левой кнопкой: Click, MouseClick
Щелкните правой кнопкой мыши: Событие щелчка не вызывается
Двойной щелчок левой: Click, MouseClick; Click, MouseClick
Дважды щелкните справа: Событие щелчка не вызывается
TextBox, RichTextBox, ListBox, MaskedTextBox, и CheckedListBox элементов управления
Note
Если пользователь щелкает любое место внутри этих элементов управления, то возникают описанные ниже события.
Щелчок левой кнопкой: Click, MouseClick
Щелкните правой кнопкой мыши: Событие щелчка не вызывается
Двойной щелчок левой: Click, MouseClick, DoubleClick, MouseDoubleClick
Дважды щелкните справа: Событие щелчка не вызывается
ListView элемент управления
Note
Указанные ниже события возникают только в том случае, если пользователь щелкает элементы в ListView. Если пользователь щелкает мышью в любом другом месте элемента управления, то события не вызываются. В дополнение к событиям, описанным ниже, существуют события BeforeLabelEdit и AfterLabelEdit, которые могут представлять интерес, если нужно выполнять проверку с помощью элемента управления ListView.
Щелчок левой кнопкой: Click, MouseClick
Щелкните правой кнопкой мыши: Click, MouseClick
Двойной щелчок левой: Click, MouseClick; DoubleClick, MouseDoubleClick
Справа дважды щелкните: Click, MouseClick; DoubleClick, MouseDoubleClick
TreeView элемент управления
Note
Указанные ниже события возникают только в том случае, если пользователь щелкает сами элементы или справа от них в элементе управления 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.
Note
Если пользователь перемещает указатель за границы переключателя при нажатой кнопке мыши (например, перемещает указатель мыши за границы элемента управления Button, когда он нажат), переключатель будет отрисовываться в состоянии "отпущено" и происходит только событие MouseUp. События Click и MouseClick в этой ситуации не наступают.