Procedimiento para simular eventos del mouse (Windows Forms para .NET)

La simulación de eventos del mouse en Windows Forms no es tan sencillo como la de eventos de teclado. Windows Forms no proporciona una clase auxiliar para desplazar el mouse e invocar acciones de clic del mouse. La única opción para controlar el mouse consiste en usar métodos nativos de Windows. Si trabaja con un control personalizado o un formulario, puede simular un evento del mouse, pero no puede controlar directamente el mouse.

Importante

La documentación de la guía de escritorio para .NET 7 y .NET 6 está en proceso de elaboración.

Eventos

La mayoría de los eventos tienen un método correspondiente que los invoca, cuyo patrón es On seguido de EventName, como en OnMouseMove. Esta opción solo es posible dentro de controles o formularios personalizados, porque estos métodos están protegidos y no se puede acceder a ellos fuera del contexto del control o formulario. La desventaja de usar un método como OnMouseMove es que realmente no controla el mouse ni interactúa con el control; simplemente genera el evento asociado. Por ejemplo, si quiere simular el desplazamiento sobre un elemento de ListBox, OnMouseMove y ListBox no reaccionan visualmente con un elemento resaltado bajo el cursor.

Estos métodos protegidos están disponibles para simular eventos del mouse.

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

Para obtener más información sobre estos eventos, vea Uso de eventos del mouse (Windows Forms para .NET)

Invocación de un clic

Si se tiene en cuenta que la mayoría de los controles realizan una acción cuando se hace clic en ellos, como un botón que llama a un código de usuario o una casilla que cambia su estado activado, Windows Forms proporciona una manera sencilla de desencadenar el clic. Algunos controles, como los cuadros combinados, no hacen nada especial al hacer clic en ellos y simular un clic no tiene ningún efecto en el control.

PerformClick

La interfaz System.Windows.Forms.IButtonControl proporciona el método PerformClick que simula un clic en el control. Los controles System.Windows.Forms.Button y System.Windows.Forms.LinkLabel implementan esta interfaz.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Con un control personalizado, use el método InvokeOnClick para simular un clic del mouse. Se trata de un método protegido al que solo se puede llamar desde dentro del formulario o un control personalizado derivado.

Por ejemplo, el código siguiente hace clic en una casilla 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

Uso de métodos nativos de Windows

Windows proporciona métodos a los que puede llamar para simular movimientos y clics del mouse, como User32.dll SendInput y User32.dll SetCursorPos. En el ejemplo siguiente se mueve el cursor del mouse al centro de un control:

[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

Vea también