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


Имитация событий мыши

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

События

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

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

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

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

Вызов щелчка

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

ВыполнениеClick

Интерфейс 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

См. также