Freigeben über


Wie man Mausereignisse simuliert

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 bei der Verwendung einer Methode wie OnMouseMove ist, dass sie die Maus nicht steuert oder mit dem Steuerelement interagiert, sondern lediglich das zugeordnete Ereignis auslöst. Wenn Sie beispielsweise das Überfahren eines Elements in einem ListBox und OnMouseMove simulieren möchten und ListBox nicht visuell mit einem hervorgehobenen Element unter dem Cursor reagiert.

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

Einen Klick auslösen

Da die meisten Steuerelemente etwas tun, wenn sie geklickt werden, wie z.B. eine Schaltfläche, die Benutzercode aufruft, oder ein Kontrollkästchen seinen Zustand ändert, stellt Windows Forms eine einfache Möglichkeit bereit, den Klick zu erfassen. Einige Steuerelemente, wie ein Kombinationsfeld, tun nichts Besonderes, wenn darauf geklickt wird, und das Simulieren eines Klicks hat keine Auswirkungen auf das Steuerelement.

PerformClick

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

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Verwenden Sie die InvokeOnClick-Methode bei einem Formular mit einem benutzerdefinierten Steuerelement, 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 auf ein Kontrollkästchen aus 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

Verwenden systemeigener Windows-Methoden

Windows stellt Methoden bereit, 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