События мыши в формах 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".
Особые элементы управления
Поведение перечисленных ниже элементов управления при щелчке мыши не соответствует стандартному.
-
Примечание.
Если пользователь щелкает поле редактирования, кнопку или элемент в списке, то для элемента управления 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