Использование событий мыши (Windows Forms .NET)

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

Важно!

Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.

События мыши

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

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

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

Объект 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 в этой ситуации не наступают.

См. также