Simulieren von Mausereignissen (Windows Forms .NET)

Das Simulieren von Mausereignissen in Windows Forms ist etwas komplexer als das Simulieren von Tastaturereignissen. Windows Forms bietet keine Hilfsprogrammklasse, mit der die Maus verschoben werden kann und Mausklickaktionen aufgerufen werden können. Die einzige Option, die Maus zu steuern, ist die Verwendung nativer Windows-Methoden. Wenn Sie mit einem benutzerdefinierten Steuerelement oder einem Formular arbeiten, können Sie ein Mausereignis simulieren, Sie können die Maus jedoch nicht direkt steuern.

Wichtig

Der Desktopleitfaden zu .NET 7 und .NET 6 ist in Bearbeitung.

Ereignisse

Die meisten Ereignisse verfügen über eine entsprechende Methode, die sie aufruft und im Muster On gefolgt von EventName (z. B. OnMouseMove) benannt wird. Diese Option wird normalerweise nur in benutzerdefinierten Steuerelementen und Formularen unterstützt, weil die Methoden geschützt sind und außerhalb des Kontexts des Steuerelements oder Formulars nicht aufgerufen werden können. Der Nachteil der Verwendung einer Methode wie OnMouseMove besteht darin, dass die Maus so nicht gesteuert werden kann und dass keine Interaktionen mit dem Steuerelement möglich sind. Es wird einfach nur das dazugehörige Ereignis ausgelöst. Wenn Sie beispielsweise das Bewegen des Mauszeigers über einem Element in einer ListBox-Klasse simulieren möchten, reagieren OnMouseMove und ListBox nicht visuell durch ein hervorgehobenes Element unter dem Cursor.

Diese geschützten Methoden sind zum Simulieren von Mausereignissen verfügbar.

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

Weitere Informationen zu diesen Ereignissen finden Sie unter Verwenden von Mausereignissen (Windows Forms .NET).

Aufrufen eines Klicks

Angesichts der Tatsache, dass auf das Klicken auf ein Steuerelement in den meisten Fällen eine Reaktion erfolgt, z. B. eine Schaltfläche, die Benutzercode aufruft, oder ein Kontrollkästchen, für das der Aktivierungszustand geändert wird, bietet Windows Forms eine einfache Möglichkeit, einen Klick auszulösen. Manche Steuerelemente, z. B. ComboBox-Steuerelemente, reagieren nicht, wenn auf sie geklickt wird. Eine Simulation eines solchen Klicks hat also keine Auswirkung auf das Steuerelement.

PerformClick

Die System.Windows.Forms.IButtonControl-Schnittstelle stellt die PerformClick-Methode bereit, die ein Klick auf das Steuerelement simuliert. Sowohl das System.Windows.Forms.Button- als auch das System.Windows.Forms.LinkLabel-Steuerelement implementieren diese Schnittstelle.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Verwenden Sie für ein Formular oder ein benutzerdefiniertes Steuerelement die InvokeOnClick-Methode zum Simulieren eines Mausklicks. Dabei handelt es sich um eine geschützte Methode, die nur von innerhalb eines Formulars oder eines abgeleiteten benutzerdefinierten Steuerelements aufgerufen werden kann.

Durch den folgenden Code wird beispielsweise ein Kontrollkästchen in button1 angeklickt.

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

Verwenden nativer Windows-Methoden

Windows bietet Methoden, die Sie aufrufen können, um Mausbewegungen und -klicks wie User32.dll SendInput und User32.dll SetCursorPos zu simulieren. Im folgenden Beispiel wird der Mauszeiger in die Mitte eines Steuerelements verschoben:

[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

Siehe auch