Udostępnij za pośrednictwem


Jak symulować zdarzenia myszy

Symulowanie zdarzeń myszy w formularzach Windows Forms nie jest tak proste, jak symulowanie zdarzeń klawiatury. System Windows Forms nie udostępnia klasy pomocniczej do przesuwania myszy i wykonywania kliknięć myszą. Jedyną opcją sterowania myszą jest użycie natywnych metod systemu Windows. Jeśli pracujesz z kontrolką niestandardową lub formularzem, możesz symulować zdarzenie myszy, ale nie możesz bezpośrednio sterować myszą.

Zdarzenia

Większość zdarzeń ma odpowiednią metodę, która je wywołuje, o nazwie we wzorcu On a następnie EventName, na przykład OnMouseMove. Ta opcja jest możliwa tylko w ramach kontrolek niestandardowych lub formularzy, ponieważ te metody są chronione i nie można uzyskać do nich dostępu spoza kontekstu kontrolki lub formularza. Wadą korzystania z metody, takiej jak OnMouseMove jest to, że w rzeczywistości nie kontroluje myszy ani nie wchodzi w interakcję z kontrolką, po prostu podnosi skojarzone zdarzenie. Jeśli na przykład chcesz symulować umieszczenie wskaźnika myszy na elemencie w ListBox, OnMouseMove i ListBox, a wyróżniony element pod kursorem nie reaguje wizualnie.

Te chronione metody są dostępne do symulowania zdarzeń myszy.

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

Aby uzyskać więcej informacji na temat tych zdarzeń, zobacz Using mouse events (Używanie zdarzeń myszy)

Wywołaj kliknięcie

Biorąc pod uwagę, że większość kontrolek wykonuje coś po kliknięciu, na przykład przycisk wywołujący kod użytkownika lub pole wyboru zmienia swoje zaznaczenie, Formularze systemu Windows zapewniają łatwy sposób wyzwalania kliknięcia. Niektóre kontrolki, takie jak kombinowane pole wyboru, nie wykonują żadnych specjalnych czynności po kliknięciu, a symulowanie kliknięcia nie wpływa na kontrolkę.

Wykonaj Kliknięcie

Interfejs System.Windows.Forms.IButtonControl udostępnia metodę PerformClick , która symuluje kliknięcie kontrolki. Obydwie, System.Windows.Forms.Button i System.Windows.Forms.LinkLabel, kontrolki implementują ten interfejs.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Użyj metody InvokeOnClick w formularzu dowolnej kontrolki niestandardowej, aby zasymulować kliknięcie myszą. Jest to metoda chroniona, która może być wywoływana tylko z poziomu formularza lub pochodnej kontrolki niestandardowej.

Na przykład poniższy kod zaznacza pole wyboru z 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

Używanie natywnych metod systemu Windows

System Windows udostępnia metody, które można wywołać w celu symulowania ruchów myszy i kliknięć, takich jak User32.dll SendInput i User32.dll SetCursorPos. Poniższy przykład przenosi kursor myszy do środka kontrolki:

[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

Zobacz także