Использование событий мыши

Большинство программ Windows Forms обрабатывают входные данные мыши, обрабатывая события мыши. В этой статье представлен обзор событий мыши, включая сведения об использовании каждого события и данных, предоставляемых для каждого события. Дополнительные сведения о событиях в целом см. в разделе "Общие сведения о событиях".

События мыши

Основным способом реагирования на входные данные мыши является обработка событий мыши. В следующей таблице показаны события мыши и объясняется, когда они вызываются.

Событие мыши Описание
Click Это событие возникает при выпуске кнопки мыши, обычно перед событием MouseUp. Обработчик этого события получает аргумент типа EventArgs. Обработайте это событие только тогда, когда необходимо определить, когда происходит щелчок.
MouseClick Это событие возникает, когда пользователь щелкает элемент управления мышью. Обработчик этого события получает аргумент типа MouseEventArgs. Обработайте это событие, когда необходимо получить сведения о мыши при нажатии кнопки.
DoubleClick Это событие возникает при двойном щелчке элемента управления. Обработчик этого события получает аргумент типа EventArgs. Обработайте это событие, если необходимо определить, когда происходит двойной щелчок.
MouseDoubleClick Это событие возникает, когда пользователь дважды щелкает элемент управления мышью. Обработчик этого события получает аргумент типа MouseEventArgs. Обработайте это событие, когда необходимо получить сведения о мыши при двойном щелчке.
MouseDown Это событие возникает, когда указатель мыши находится на элементе управления, и пользователь нажимает кнопку мыши. Обработчик этого события получает аргумент типа MouseEventArgs.
MouseEnter Это событие возникает, когда указатель мыши входит в границу или клиентскую область элемента управления, в зависимости от его типа. Обработчик этого события получает аргумент типа EventArgs.
MouseHover Это событие возникает, когда указатель мыши останавливается и задерживается над элементом управления. Обработчик этого события получает аргумент типа EventArgs.
MouseLeave Это событие возникает, когда указатель мыши покидает границу или клиентская область элемента управления в зависимости от типа элемента управления. Обработчик этого события получает аргумент типа EventArgs.
MouseMove Это событие возникает при перемещении указателя мыши во время его перемещений над элементом управления. Обработчик этого события получает аргумент типа MouseEventArgs.
MouseUp Это событие возникает, когда указатель мыши находится на элементе управления, и пользователь освобождает кнопку мыши. Обработчик этого события получает аргумент типа MouseEventArgs.
MouseWheel Это событие возникает, когда пользователь поворачивает колесико мыши, пока элемент управления имеет фокус. Обработчик этого события получает аргумент типа MouseEventArgs. Используйте свойство MouseEventArgs.Delta, чтобы определить, насколько далеко прокрутили колесико мыши.

Сведения о мыши

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.

Отдельные элементы управления

Следующие элементы управления не соответствуют стандартному поведению событий щелчка мыши:

  • 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.

  • контроллер TreeView

    Замечание

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

Поведение отображения элементов управления переключателями

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

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

  2. Элемент управления выглядит нажатым.

  3. Инициируется событие MouseDown.

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

  5. Элемент управления отображается в поднятом виде.

  6. Инициируется событие Click.

  7. Инициируется событие MouseClick.

  8. Инициируется событие MouseUp.

    Замечание

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

См. также