Поделиться через


События мыши в формах Windows Forms

Обновлен: Ноябрь 2007

При обработке ввода мыши обычно необходимо знать положение указателя и состояние кнопок мыши. В этом разделе приводится информация о получении этих сведений из событий мыши и описывается порядок, в котором вызываются события щелчка мыши в элементах управления 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, кроме отмеченных в представленном ниже списке отдельных элементов, вызывают события щелчка в одном и том же порядке после того, как была нажата и отпущена кнопка мыши (вне зависимости от того, какая кнопка). Ниже приведен список, показывающий порядок событий, вызываемых после одиночного щелчка мыши.

  1. Событие MouseDown.

  2. Событие Click.

  3. Событие MouseClick.

  4. Событие MouseUp.

Ниже приведен порядок событий, возникающих после двойного щелчка мыши.

  1. Событие MouseDown.

  2. Событие Click.

  3. Событие MouseClick.

  4. Событие MouseUp.

  5. Событие MouseDown.

  6. Событие DoubleClick. (Это может изменяться в зависимости от того, установлено ли для бита стиля StandardDoubleClick элемента управления значение true. Дополнительные сведения о том, как задать бит ControlStyles, см. в разделе, посвященном методу SetStyle.)

  7. Событие MouseDoubleClick.

  8. Событие MouseUp.

Пример кода, который демонстрирует порядок событий щелчка мыши, см. в разделе Практическое руководство. Обработка событий пользовательского ввода в элементах управления Windows Forms.

Специальные элементы управления

Поведение следующих элементов управления не соответствуют стандартному поведению события при щелчке мыши.

  • Элементы управления Button, CheckBox, ComboBox и RadioButton

    ms171542.alert_note(ru-ru,VS.90).gifПримечание.

    Если пользователь щелкает поле редактирования, кнопку или элемент в списке, то для элемента управления ComboBox возникают описанные ниже события.

    • Щелчок левой кнопкой мыши: Click, MouseClick

    • Щелчок правой кнопкой мыши: событие щелчка не вызывается

    • Двойной щелчок левой кнопкой мыши: Click, MouseClick; Click, MouseClick

    • Двойной щелчок правой кнопкой мыши: событие щелчка не вызывается

  • Элементы управления TextBox, RichTextBox, ListBox, MaskedTextBox и CheckedListBox

    ms171542.alert_note(ru-ru,VS.90).gifПримечание.

    Если пользователь щелкает любое место внутри этих элементов управления, то возникают описанные ниже события.

    • Щелчок левой кнопкой мыши: Click, MouseClick

    • Щелчок правой кнопкой мыши: событие щелчка не вызывается

    • Двойной щелчок левой кнопкой мыши: Click, MouseClick, DoubleClick, MouseDoubleClick

    • Двойной щелчок правой кнопкой мыши: событие щелчка не вызывается

  • Элемент управления ListView

    ms171542.alert_note(ru-ru,VS.90).gifПримечание.

    Если пользователь щелкает элементы в элементе управления ListView, возникают указанные ниже события. Если пользователь щелкает мышью в любом другом месте элемента управления, никакие события не вызываются. В дополнение к событиям, описанным ниже, имеются события BeforeLabelEdit и AfterLabelEdit, которые могут представлять интерес, если требуется выполнять проверку с помощью элемента управления ListView.

  • Элемент управления TreeView

    ms171542.alert_note(ru-ru,VS.90).gifПримечание.

    Описанные ниже события происходят только при нажатии самих элементов или справа от них в элементе управления TreeView. Если пользователь щелкает мышью в любом другом месте элемента управления, никакие события не вызываются. В дополнение к событиям, описанным ниже, имеются события BeforeCheck, BeforeSelect, BeforeLabelEdit, AfterSelect, AfterCheck и AfterLabelEdit, которые могут представлять интерес, если требуется выполнять проверку с помощью элемента управления TreeView.

Поведение рисования переключателей

Переключатели, такие как элементы управления, производные от класса ButtonBase, имеют следующее нестандартное поведение рисования в сочетании с событиями щелчков мыши.

  1. Пользователь нажимает кнопку мыши.

  2. Элемент управления красит в состоянии "нажато".

  3. Возникает событие MouseDown.

  4. Пользователь отпускает кнопку мыши.

  5. Элемент управления красит в состоянии "отпущено".

  6. Возникает событие Click.

  7. Возникает событие MouseClick.

  8. Возникает событие MouseUp.

    ms171542.alert_note(ru-ru,VS.90).gifПримечание.

    Если пользователь перемещает указатель за границы переключателя при нажатой кнопке мыши (например, перемещает указатель мыши за границы элемента управления Button, когда он находится в нажатом состоянии), переключатель будет красить, находясь в состоянии "отпущено", и происходит только событие MouseUp. События Click и MouseClick в этой ситуации не возникают.

См. также

Другие ресурсы

Ввод данных мышью в приложении Windows Forms