Simulace událostí myši (Windows Forms .NET)
Simulace událostí myši ve Windows Forms není tak jednoduchá jako simulace událostí klávesnice. Windows Forms neposkytuje pomocnou třídu pro přesunutí myši a vyvolání akcí kliknutí myší. Jedinou možností pro ovládání myši je použití nativních metod Systému Windows. Pokud pracujete s vlastním ovládacím prvku nebo formulářem, můžete simulovat událost myši, ale nemůžete přímo ovládat myš.
Dění
Většina událostí má odpovídající metodu, která je vyvolává, pojmenovanou ve vzoru On
následovanou EventName
, jako například OnMouseMove
. Tato možnost je možná jenom v rámci vlastních ovládacích prvků nebo formulářů, protože tyto metody jsou chráněné a nelze k němu přistupovat mimo kontext ovládacího prvku nebo formuláře. Nevýhodou použití metody, jako je například OnMouseMove
, je, že fakticky neřídí myš ani neinteraguje s ovládacím prvkem, pouze vyvolá přidruženou událost. Pokud například chcete simulovat najetí myší na položku v ListBox, OnMouseMove
a ListBox
vizuálně nereaguje se zvýrazněnou položkou pod kurzorem.
Tyto chráněné metody jsou k dispozici pro simulaci událostí myši.
OnMouseDown
OnMouseEnter
OnMouseHover
OnMouseLeave
OnMouseMove
OnMouseUp
OnMouseWheel
OnMouseClick
OnMouseDoubleClick
Další informace o těchto událostech najdete v tématu Použití událostí myši (Windows Forms .NET)
Vyvolání kliknutí
Vzhledem k tomu, že většina ovládacích prvků něco dělá při kliknutí, jako je tlačítko volající uživatelský kód, nebo zaškrtávací políčko změnit jeho zaškrtnutý stav, Windows Forms poskytuje snadný způsob, jak aktivovat kliknutí. Některé ovládací prvky, jako například pole se seznamem, nedělají nic zvláštního, když na ně kliknete, a simulace kliknutí nemá na ovládací prvek žádný vliv.
PerformClick
Rozhraní System.Windows.Forms.IButtonControl poskytuje PerformClick metodu, která simuluje kliknutí na ovládací prvek. Toto rozhraní implementují ovládací prvky System.Windows.Forms.Button i System.Windows.Forms.LinkLabel.
button1.PerformClick();
Button1.PerformClick()
InvokeClick
S formulářem vlastního ovládacího prvku můžete pomocí metody InvokeOnClick simulovat kliknutí myší. Jedná se o chráněnou metodu, kterou lze volat pouze z formuláře nebo odvozeného vlastního ovládacího prvku.
Například následující kód klikne na zaškrtávací políčko 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
Použití nativních metod Windows
Systém Windows poskytuje metody, které můžete volat k simulaci pohybu myši a kliknutí, jako jsou User32.dll SendInput
a User32.dll SetCursorPos
. Následující příklad přesune kurzor myši na střed ovládacího prvku:
[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
Viz také
.NET Desktop feedback