Partager via


Comment simuler des événements de souris

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ée dans le modèle de On suivi EventName, par exemple 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 c’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 survol d'un élément dans un ListBox, OnMouseMove, et si le ListBox ne réagit pas visuellement avec un élément sous le curseur mis en surbrillance.

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

Effectuer un clic

Windows Forms fournit un moyen simple de déclencher le clic, étant donné que la plupart des contrôles déclenchent une action lorsqu'ils sont cliqués, comme lorsqu'un bouton déclenche le code utilisateur ou une case à cocher change son état. Certains contrôles, tels qu'une zone de liste modifiable, ne font rien de spécial lorsque vous cliquez ou simulez un clic; cela n'a aucun effet pour le contrôle.

PerformClick

L’interface System.Windows.Forms.IButtonControl fournit la PerformClick méthode 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

Dans 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 permet de cocher une case à cocher depuis 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