Windows フォームでのマウス イベントのシミュレーションは、キーボード イベントのシミュレーションほど簡単ではありません。 Windows フォームには、マウスを移動してマウス クリック 操作を呼び出すヘルパー クラスは用意されていません。 マウスを制御する唯一のオプションは、ネイティブ Windows メソッドを使用することです。 カスタム コントロールまたはフォームを使用している場合は、マウス イベントをシミュレートできますが、マウスを直接制御することはできません。
イベント
ほとんどのイベントには、それらを呼び出す対応するメソッドがあり、On
のパターンで名前が付けられ、その後に EventName
などの OnMouseMove
が続きます。 これらのメソッドは保護されており、コントロールまたはフォームのコンテキストの外部からアクセスできないため、このオプションはカスタム コントロールまたはフォーム内でのみ可能です。
OnMouseMove
などのメソッドを使用する場合の欠点は、マウスを実際に制御したり、コントロールと対話したりせず、関連付けられたイベントを発生させるだけであるという点です。 たとえば、ListBox内の項目の上でのホバーをシミュレートする場合、OnMouseMove
、ListBox
はカーソルの下の強調表示された項目と視覚的に反応しません。
これらの保護されたメソッドは、マウス イベントをシミュレートするために使用できます。
OnMouseDown
OnMouseEnter
OnMouseHover
OnMouseLeave
OnMouseMove
OnMouseUp
OnMouseWheel
OnMouseClick
OnMouseDoubleClick
これらのイベントの詳細については、「マウス イベントの使用」を参照してください。
クリックを呼び出す
ほとんどのコントロールでは、ユーザー コードを呼び出すボタンやチェック ボックスの状態の変更など、クリックされたときに何らかの処理が行われます。Windows フォームでは、クリックをトリガーする簡単な方法が用意されています。 コンボ ボックスなどの一部のコントロールでは、クリックしたときに特別な操作が行われず、クリックをシミュレートしてもコントロールには影響しません。
PerformClick
System.Windows.Forms.IButtonControl インターフェイスは、コントロールのクリックをシミュレートする PerformClick メソッドを提供します。 System.Windows.Forms.Button コントロールと System.Windows.Forms.LinkLabel コントロールの両方で、このインターフェイスが実装されます。
button1.PerformClick();
Button1.PerformClick()
InvokeClick
フォームのカスタム コントロールでは、InvokeOnClick メソッドを使用してマウス クリックをシミュレートします。 これは、フォームまたは派生カスタム コントロール内からのみ呼び出すことができる保護されたメソッドです。
たとえば、次のコードでは、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
ネイティブ Windows メソッドを使用する
Windows には、マウスの動きやクリック (User32.dll SendInput
や User32.dll SetCursorPos
など) をシミュレートするために呼び出すことができるメソッドが用意されています。 次の例では、マウス カーソルをコントロールの中央に移動します。
[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
こちらも参照ください
.NET Desktop feedback