Freigeben über


Wie man Mausereignisse simuliert (Windows Forms .NET)

Das Simulieren von Mausereignissen in Windows Forms ist nicht so einfach wie das Simulieren von Tastaturereignissen. Windows Forms stellt keine Hilfsklasse bereit, um die Maus zu verschieben und Mausklickaktionen aufzurufen. Die einzige Option zum Steuern der Maus besteht darin, systemeigene Windows-Methoden zu verwenden. Wenn Sie mit einem benutzerdefinierten Steuerelement oder einem Formular arbeiten, können Sie ein Mausereignis simulieren, aber sie können die Maus nicht direkt steuern.

Ereignisse

Die meisten Ereignisse verfügen über eine entsprechende Methode, die sie aufruft, die im Muster von On gefolgt von EventNamebenannt wird, z. B. OnMouseMove. Diese Option ist nur in benutzerdefinierten Steuerelementen oder Formularen möglich, da diese Methoden geschützt sind und nicht außerhalb des Kontexts des Steuerelements oder Formulars zugegriffen werden kann. Der Nachteil der Verwendung einer Methode wie OnMouseMove besteht darin, dass sie die Maus nicht tatsächlich steuert oder mit dem Steuerelement interagiert, sondern einfach das zugeordnete Ereignis auslöst. Wenn Sie beispielsweise das Bewegen des Cursors über ein Element in einem ListBox, OnMouseMove oder ListBox simulieren möchten und dies keine visuelle Reaktion mit einem hervorgehobenen Element unter dem Cursor erzeugt.

Diese geschützten Methoden stehen zur Verfügung, um Mausereignisse zu simulieren.

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

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

Auslösen eines Klicks

Da die meisten Steuerelemente bei einem Klick eine Aktion auslösen, wie z. B. eine Schaltfläche, die Benutzercode ausführt, oder ein Kontrollkästchen, das seinen Zustand ändert, bietet Windows Forms eine einfache Möglichkeit, den Klick auszulösen. Einige Steuerelemente, wie etwa ein Kombinationsfeld, reagieren nicht besonders auf einen Klick, und das Simulieren eines Klicks hat keine Auswirkung auf das Steuerelement.

PerformClick

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

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Verwenden Sie bei einem Formular ein benutzerdefiniertes Steuerelement die InvokeOnClick-Methode, um einen Mausklick zu simulieren. Dies ist eine geschützte Methode, die nur innerhalb des Formulars oder eines abgeleiteten benutzerdefinierten Steuerelements aufgerufen werden kann.

Der folgende Code klickt beispielsweise ein Kontrollkästchen von button1an.

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 systemeigener Windows-Methoden

Windows stellt Methoden bereit, die Sie aufrufen können, um Mausbewegungen und Klicks wie User32.dll SendInput und User32.dll SetCursorPoszu 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