Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Имитация событий мыши в 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
См. также
.NET Desktop feedback