Jak symulować zdarzenia myszy (Windows Forms .NET)
Symulowanie zdarzeń myszy w formularzach Windows Forms nie jest tak proste, jak symulowanie zdarzeń klawiatury. Formularze systemu Windows nie udostępnia klasy pomocniczej do przenoszenia myszy i wywoływania akcji kliknięcia 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
, po którym następuje EventName
ciąg , 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 elemencie ListBox, OnMouseMove
a ListBox
element nie reaguje wizualnie z wyróżnionym elementem pod kursorem.
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 Używanie zdarzeń myszy (Windows Forms .NET)
Wywoływanie kliknięcia
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 jego stan zaznaczone, formularze systemu Windows zapewniają łatwy sposób wyzwalania kliknięcia. Niektóre kontrolki, takie jak pole kombi, nie wykonują żadnych specjalnych czynności po kliknięciu i symulowaniu kliknięcia nie mają wpływu na kontrolkę.
WykonajKliknij
Interfejs System.Windows.Forms.IButtonControl udostępnia metodę PerformClick , która symuluje kliknięcie kontrolki. Zarówno kontrolki , jak System.Windows.Forms.Button i System.Windows.Forms.LinkLabel implementują ten interfejs.
button1.PerformClick();
Button1.PerformClick()
InvokeClick
Za pomocą formularza kontrolki niestandardowej użyj InvokeOnClick metody , 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 klika 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 też
.NET Desktop feedback