Sdílet prostřednictvím


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é