マウス イベントをシミュレートする方法 (Windows フォーム .NET)
Windows フォームでのマウス イベントのシミュレートは、キーボード イベントをシミュレートするほど簡単ではありません。 Windows フォームには、マウスを移動してマウスクリックのアクションを呼び出すヘルパー クラスがありません。 マウスは、Windows のネイティブ メソッドを使用してのみ制御することができます。 カスタム コントロールまたはフォームを使用している場合は、マウス イベントをシミュレートできますが、マウスを直接制御することはできません。
Events
ほとんどのイベントには、それらを呼び出す対応するメソッドがあり、OnMouseMove
のように On
の後に EventName
が続く名前が付けられています。 これらのメソッドは保護されており、コントロールまたはフォームのコンテキストの外部からアクセスすることはできないため、このオプションは、カスタム コントロールまたはフォーム内でのみ使用できます。 OnMouseMove
などのメソッドを使用する場合には、実際にマウスを制御したり、コントロールとやり取りしたりできず、関連するイベントが発生するだけという欠点があります。 たとえば、ListBox 内の項目にマウス ポインターを重ねた状態をシミュレートしたい場合、OnMouseMove
と ListBox
は、カーソルの下で強調表示されている項目に視覚的に反応しません。
これらの保護されたメソッドは、マウス イベントをシミュレートするために使用します。
OnMouseDown
OnMouseEnter
OnMouseHover
OnMouseLeave
OnMouseMove
OnMouseUp
OnMouseWheel
OnMouseClick
OnMouseDoubleClick
これらのイベントの詳細については、「マウス イベントの使用 (Windows フォーム .NET)」を参照してください。
クリックを呼び出す
ユーザー コードを呼び出すボタンやチェック状態を変更するチェックボックスなどのように、ほとんどのコントロールはクリックされると何らかの動作を実行するので、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