Partager via


Comment simuler des événements de souris (Windows Forms .NET)

La simulation d’événements de souris dans Windows Forms n’est pas aussi simple que la simulation d’événements de clavier. Windows Forms ne fournit pas de classe d’assistance pour déplacer la souris et appeler des actions de clic de souris. La seule option permettant de contrôler la souris consiste à utiliser des méthodes Windows natives. Si vous utilisez un contrôle personnalisé ou un formulaire, vous pouvez simuler un événement de souris, mais vous ne pouvez pas contrôler directement la souris.

Événements

La plupart des événements ont une méthode correspondante qui les appelle, nommées dans le modèle de On suivi de EventName, comme OnMouseMove. Cette option n’est possible que dans les contrôles ou formulaires personnalisés, car ces méthodes sont protégées et ne sont pas accessibles en dehors du contexte du contrôle ou du formulaire. L’inconvénient de l’utilisation d’une méthode telle que OnMouseMove est qu’elle ne contrôle pas réellement la souris ou interagit avec le contrôle, il déclenche simplement l’événement associé. Par exemple, si vous souhaitez simuler le pointage sur un élément dans un ListBox, OnMouseMove et le ListBox ne réagit pas visuellement avec un élément mis en surbrillance sous le curseur.

Ces méthodes protégées sont disponibles pour simuler des événements de souris.

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

Pour plus d’informations sur ces événements, consultez Utilisation des événements de souris (Windows Forms .NET)

Provoquer un clic

Étant donné que la plupart des contrôles exécutent une action lorsqu'ils sont cliqués, comme un bouton qui appelle le code utilisateur ou une case à cocher qui change son état coché, Windows Forms offre un moyen simple de déclencher le clic. Certains contrôles, tels qu'une zone de liste modifiable, ne réagissent pas lorsqu'on clique dessus et simuler un clic n'a également aucun effet sur le contrôle.

PerformClick

L’interface System.Windows.Forms.IButtonControl fournit la méthode PerformClick qui simule un clic sur le contrôle. Les contrôles System.Windows.Forms.Button et System.Windows.Forms.LinkLabel implémentent cette interface.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Avec un formulaire de contrôle personnalisé, utilisez la méthode InvokeOnClick pour simuler un clic de souris. Il s’agit d’une méthode protégée qui ne peut être appelée qu’à partir du formulaire ou d’un contrôle personnalisé dérivé.

Par exemple, le code suivant clique sur une case à cocher à partir de 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

Utiliser des méthodes Windows natives

Windows fournit des méthodes que vous pouvez appeler pour simuler des mouvements de souris et des clics tels que User32.dll SendInput et User32.dll SetCursorPos. L’exemple suivant déplace le curseur de la souris au centre d’un contrôle :

[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

Voir aussi