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


Как имитировать события мыши (Windows Forms .NET)

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

События

У большинства событий есть соответствующий метод, который их вызывает, с шаблонным именем, начинающимся с On, за которым следует EventName, например OnMouseMove. Этот вариант возможен только в пределах пользовательских элементов управления или форм, так как эти методы защищены и недоступны вне контекста элемента управления или формы. Недостаток использования такого метода, как OnMouseMove, заключается в том, что он не управляет мышью или взаимодействует с элементом управления, а просто вызывает связанное событие. Например, если вы хотите имитировать наведение указателя мыши на элемент в ListBox, OnMouseMove и ListBox не будут визуально реагировать на выделенный элемент под курсором.

Эти защищенные методы можно использовать для имитации событий мыши.

  • OnMouseDown
  • OnMouseEnter
  • OnMouseHover
  • OnMouseLeave
  • OnMouseMove
  • OnMouseUp
  • OnMouseWheel
  • OnMouseClick
  • OnMouseDoubleClick

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

Вызов щелчка мышью

Большинство элементов управления при щелчке мышью выполняют какое-либо действие, например вызов пользовательского кода при нажатии кнопки или изменение состояния флажка после его установки. Поэтому в Windows Forms предусмотрен простой способ запуска действия щелчка мышью. Некоторые элементы управления, такие как ComboBox, не выполняют никаких специальных действий при щелчке мышью, а имитация щелчка не влияет на элемент управления.

PerformClick

Интерфейс System.Windows.Forms.IButtonControl предоставляет метод PerformClick, который имитирует щелчок элемента управления. Этот интерфейс реализуется как элементом управления System.Windows.Forms.Button, так и элементом управления System.Windows.Forms.LinkLabel.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

В форме с пользовательским элементом управления используйте метод InvokeOnClick для имитации щелчка мышью. Это защищенный метод, который может вызываться только в форме или в производном пользовательском элементе управления.

Например, ниже представлен код установки флажка в button1.

private void button1_Click(object sender, EventArgs e)
{
    InvokeOnClick(checkBox1, EventArgs.Empty);
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    InvokeOnClick(CheckBox1, EventArgs.Empty)
End Sub

Использование собственных методов Windows

Windows предоставляет методы, которые можно вызывать для имитации движений мыши и щелчков мышью, такие как User32.dll SendInput и User32.dll SetCursorPos. В следующем примере курсор мыши перемещается в центр элемента управления:

[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int x, int y);

private void button1_Click(object sender, EventArgs e)
{
    Point position = PointToScreen(checkBox1.Location) + new Size(checkBox1.Width / 2, checkBox1.Height / 2);
    SetCursorPos(position.X, position.Y);
}
<Runtime.InteropServices.DllImport("USER32.DLL", EntryPoint:="SetCursorPos")>
Public Shared Function SetCursorPos(x As Integer, y As Integer) As Boolean : End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim position As Point = PointToScreen(CheckBox1.Location) + New Size(CheckBox1.Width / 2, CheckBox1.Height / 2)
    SetCursorPos(position.X, position.Y)
End Sub

См. также