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