Come simulare gli eventi del mouse (Windows Form .NET)

Simulare eventi del mouse in Windows Form non è semplice come simulare gli eventi della tastiera. Windows Form non fornisce una classe helper per spostare il mouse e richiamare azioni di clic del mouse. L'unica opzione per controllare il mouse consiste nell'usare i metodi nativi di Windows. Se si usa un controllo personalizzato o un modulo, è possibile simulare un evento del mouse, ma non è possibile controllare direttamente il mouse.

Importante

La documentazione di Desktop Guide per .NET 7 e .NET 6 è in fase di costruzione.

evento

La maggior parte degli eventi ha un metodo corrispondente che li richiama, denominato nel modello di On seguito da EventName, ad esempio OnMouseMove. Questa opzione è possibile solo all'interno di controlli o moduli personalizzati, perché questi metodi sono protetti e non possono essere accessibili dall'esterno del contesto del controllo o del modulo. Lo svantaggio dell'uso di un metodo, ad esempio OnMouseMove , è che non controlla effettivamente il mouse o interagisce con il controllo, genera semplicemente l'evento associato. Ad esempio, se si vuole simulare il passaggio del mouse su un elemento in un ListBoxOnMouseMove oggetto e non ListBox reagisce visivamente con un elemento evidenziato sotto il cursore.

Questi metodi protetti sono disponibili per simulare gli eventi del mouse.

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

Per altre informazioni su questi eventi, vedere Uso degli eventi del mouse (Windows Form .NET)

Richiamare un clic

Considerando che la maggior parte dei controlli esegue operazioni quando si fa clic, ad esempio un pulsante che chiama il codice utente o la casella di controllo modifica lo stato selezionato, Windows Form offre un modo semplice per attivare il clic. Alcuni controlli, ad esempio una casella combinata, non eseguono operazioni speciali quando si fa clic e simulano un clic non hanno alcun effetto sul controllo.

PerformClick

L'interfaccia System.Windows.Forms.IButtonControl fornisce il PerformClick metodo che simula un clic sul controllo . Entrambi i System.Windows.Forms.Button controlli e System.Windows.Forms.LinkLabel implementano questa interfaccia.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Con un modulo un controllo personalizzato, usare il InvokeOnClick metodo per simulare un clic del mouse. Si tratta di un metodo protetto che può essere chiamato solo dall'interno del form o da un controllo personalizzato derivato.

Ad esempio, il codice seguente fa clic su una casella di controllo da 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

Usa metodi nativi di Windows

Windows fornisce metodi che è possibile chiamare per simulare i movimenti del mouse e i clic, User32.dll SendInput ad esempio e User32.dll SetCursorPos. Nell'esempio seguente il cursore del mouse viene spostato al centro di un controllo:

[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

Vedi anche