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
.NET Desktop feedback