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.
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
.NET Desktop feedback