Compartir a través de


Cómo simular eventos del mouse

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

Eventos

La mayoría de los eventos tienen un método correspondiente que los invoca, denominado según el patrón On seguido por EventName, como OnMouseMove. Esta opción solo es posible dentro de los controles o formularios personalizados, ya que estos métodos están protegidos y no se puede tener acceso desde fuera del contexto del control o formulario. La desventaja de usar un método como OnMouseMove es que realmente no controla el mouse o interactúa con el control, simplemente genera el evento asociado. Por ejemplo, si quisiera simular el paso del puntero sobre un elemento en un ListBox, y el OnMouseMove y el 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, consulte Uso de eventos del mouse.

Invocar un clic

Teniendo en cuenta que la mayoría de los controles hacen algo cuando se hace clic, como un botón que llama al código de usuario o la casilla cambia su estado activado, Windows Forms proporciona una manera fácil de activar el clic. Algunos controles, como un cuadro combinado, no hacen nada especial al hacer clic y simular un clic no tiene ningún efecto en el control.

PerformClick

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

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Con un formulario de un control personalizado, use el InvokeOnClick método para simular un clic del mouse. Se trata de un método protegido al que solo se puede llamar desde el formulario o desde 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 que puedes llamar para simular movimientos del mouse y clics 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

Consulte también