Compartilhar via


Como simular eventos do mouse

Simular eventos de mouse no Windows Forms não é tão simples quanto simular eventos de teclado. O Windows Forms não fornece uma classe auxiliar para mover o mouse e invocar ações de clique do mouse. A única opção para controlar o mouse é usar métodos nativos do Windows. Se você estiver trabalhando com um controle personalizado ou um formulário, poderá simular um evento do mouse, mas não poderá controlar diretamente o mouse.

Eventos

A maioria dos eventos tem um método correspondente que os invoca, nomeado no padrão de On seguido por EventName, como OnMouseMove. Essa opção só é possível em formulários ou controles personalizados, pois esses métodos são protegidos e não podem ser acessados de fora do contexto do controle ou formulário. A desvantagem de usar um método como OnMouseMove é que ele realmente não controla o mouse ou interage com o controle, ele simplesmente gera o evento associado. Por exemplo, se você quiser simular passar o mouse sobre um item em um ListBox, OnMouseMove e o ListBox não reagirá visualmente com um item realçado sob o cursor.

Esses métodos protegidos estão disponíveis para simular eventos do mouse.

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

Para obter mais informações sobre esses eventos, consulte Usando eventos do mouse

Invocar um clique

Considerando que a maioria dos controles faz algo quando clicado, como um botão que chama o código do usuário ou a caixa de seleção altera seu estado marcado, o Windows Forms fornece uma maneira fácil de disparar o clique. Alguns controles, como uma caixa de combinação, não fazem nada especial quando clicado e simular um clique não tem efeito no controle.

PerformClick

A interface System.Windows.Forms.IButtonControl fornece o método PerformClick que simula um clique no controle. Os controles System.Windows.Forms.Button e System.Windows.Forms.LinkLabel implementam essa interface.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Em um formulário com controle personalizado, use o método InvokeOnClick para simular um clique do mouse. Esse é um método protegido que só pode ser chamado de dentro do formulário ou de um controle personalizado derivado.

Por exemplo, o código a seguir clica em uma caixa de seleção 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

Usar métodos nativos do Windows

O Windows fornece métodos que você pode chamar para simular movimentos e cliques do mouse, como User32.dll SendInput e User32.dll SetCursorPos. O exemplo a seguir move o cursor do mouse para o centro de um controle:

[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 também