Jak symulować zdarzenia myszy (Windows Forms .NET)

Symulowanie zdarzeń myszy w formularzach Windows Forms nie jest tak proste, jak symulowanie zdarzeń klawiatury. Formularze systemu Windows nie udostępnia klasy pomocniczej do przenoszenia myszy i wywoływania akcji kliknięcia myszą. Jedyną opcją sterowania myszą jest użycie natywnych metod systemu Windows. Jeśli pracujesz z kontrolką niestandardową lub formularzem, możesz symulować zdarzenie myszy, ale nie możesz bezpośrednio sterować myszą.

Ważne

Dokumentacja przewodnika dla komputerów dla platform .NET 7 i .NET 6 jest w budowie.

Wydarzenia

Większość zdarzeń ma odpowiednią metodę, która je wywołuje, o nazwie we wzorcu On , po którym następuje EventNameciąg , na przykład OnMouseMove. Ta opcja jest możliwa tylko w ramach kontrolek niestandardowych lub formularzy, ponieważ te metody są chronione i nie można uzyskać do nich dostępu spoza kontekstu kontrolki lub formularza. Wadą korzystania z metody, takiej jak OnMouseMove jest to, że w rzeczywistości nie kontroluje myszy ani nie wchodzi w interakcję z kontrolką, po prostu podnosi skojarzone zdarzenie. Jeśli na przykład chcesz symulować umieszczenie wskaźnika myszy na elemencie w elemencie ListBox, OnMouseMove a ListBox element nie reaguje wizualnie z wyróżnionym elementem pod kursorem.

Te chronione metody są dostępne do symulowania zdarzeń myszy.

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

Aby uzyskać więcej informacji na temat tych zdarzeń, zobacz Używanie zdarzeń myszy (Windows Forms .NET)

Wywoływanie kliknięcia

Biorąc pod uwagę, że większość kontrolek wykonuje coś po kliknięciu, na przykład przycisk wywołujący kod użytkownika lub pole wyboru zmienia jego stan zaznaczone, formularze systemu Windows zapewniają łatwy sposób wyzwalania kliknięcia. Niektóre kontrolki, takie jak pole kombi, nie wykonują żadnych specjalnych czynności po kliknięciu i symulowaniu kliknięcia nie mają wpływu na kontrolkę.

WykonajKliknij

Interfejs System.Windows.Forms.IButtonControl udostępnia metodę PerformClick , która symuluje kliknięcie kontrolki. Zarówno kontrolki , jak System.Windows.Forms.Button i System.Windows.Forms.LinkLabel implementują ten interfejs.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Za pomocą formularza kontrolki niestandardowej użyj InvokeOnClick metody , aby zasymulować kliknięcie myszą. Jest to metoda chroniona, która może być wywoływana tylko z poziomu formularza lub pochodnej kontrolki niestandardowej.

Na przykład poniższy kod klika pole wyboru z 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

Używanie natywnych metod systemu Windows

System Windows udostępnia metody, które można wywołać w celu symulowania ruchów myszy i kliknięć, takich jak User32.dll SendInput i User32.dll SetCursorPos. Poniższy przykład przenosi kursor myszy do środka kontrolki:

[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

Zobacz też