Dela via


Hur man simulerar mushändelser (Windows Forms .NET)

Att simulera mushändelser i Windows Forms är inte lika enkelt som att simulera tangentbordshändelser. Windows Forms tillhandahåller ingen hjälpklass för att flytta musen och anropa musklicksåtgärder. Det enda alternativet för att styra musen är att använda inbyggda Windows-metoder. Om du arbetar med en anpassad kontroll eller ett formulär kan du simulera en mushändelse, men du kan inte styra musen direkt.

Evenemang

De flesta händelser har en motsvarande metod som anropar dem, med namnet i mönstret för On följt av EventName, till exempel OnMouseMove. Det här alternativet är endast möjligt i anpassade kontroller eller formulär, eftersom dessa metoder är skyddade och inte kan nås utanför kontexten för kontrollen eller formuläret. Nackdelen med att använda en metod som OnMouseMove är att den faktiskt inte styr musen eller interagerar med kontrollen, den genererar helt enkelt den associerade händelsen. Om du till exempel vill simulera hovring över ett objekt i en ListBoxreagerar OnMouseMove och ListBox inte visuellt med ett markerat objekt under markören.

Dessa skyddade metoder är tillgängliga för att simulera mushändelser.

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

Mer information om dessa händelser finns i Använda mushändelser (Windows Forms .NET)

Utför ett klick

Med tanke på att de flesta kontroller gör något när du klickar, till exempel en knapp som anropar användarkod, eller kryssrutan ändrar dess markerade tillstånd, ger Windows Forms ett enkelt sätt att utlösa klicket. Vissa kontroller, till exempel en kombinationsruta, gör inget speciellt när du klickar och att simulera ett klick har ingen effekt på kontrollen.

PerformClick

Gränssnittet System.Windows.Forms.IButtonControl innehåller metoden PerformClick som simulerar ett klick på kontrollen. Både kontrollerna System.Windows.Forms.Button och System.Windows.Forms.LinkLabel implementerar det här gränssnittet.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

För att använda ett formulär som en anpassad kontroll, använd metoden InvokeOnClick för att simulera ett musklick. Det här är en skyddad metod som bara kan anropas inifrån formuläret eller en härledd anpassad kontroll.

Följande kod klickar till exempel på en kryssruta från 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

Använda interna Windows-metoder

Windows innehåller metoder som du kan anropa för att simulera musrörelser och klick som User32.dll SendInput och User32.dll SetCursorPos. I följande exempel flyttas muspekaren till mitten av en kontroll:

[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

Se även