次の方法で共有


マウス イベントをシミュレートする方法

Windows フォームでのマウス イベントのシミュレーションは、キーボード イベントのシミュレーションほど簡単ではありません。 Windows フォームには、マウスを移動してマウス クリック 操作を呼び出すヘルパー クラスは用意されていません。 マウスを制御する唯一のオプションは、ネイティブ Windows メソッドを使用することです。 カスタム コントロールまたはフォームを使用している場合は、マウス イベントをシミュレートできますが、マウスを直接制御することはできません。

イベント

ほとんどのイベントには、それらを呼び出す対応するメソッドがあり、On のパターンで名前が付けられ、その後に EventNameなどの OnMouseMoveが続きます。 これらのメソッドは保護されており、コントロールまたはフォームのコンテキストの外部からアクセスできないため、このオプションはカスタム コントロールまたはフォーム内でのみ可能です。 OnMouseMove などのメソッドを使用する場合の欠点は、マウスを実際に制御したり、コントロールと対話したりせず、関連付けられたイベントを発生させるだけであるという点です。 たとえば、ListBox内の項目の上でのホバーをシミュレートする場合、OnMouseMoveListBox はカーソルの下の強調表示された項目と視覚的に反応しません。

これらの保護されたメソッドは、マウス イベントをシミュレートするために使用できます。

  • 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 SendInputUser32.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

こちらも参照ください