Windows フォームにおけるマウス入力のしくみ

マウス入力の受信と処理は、すべての Windows アプリケーションの重要な部分です。 アプリケーションでアクションを実行するマウス イベントを処理したり、マウスの位置情報を利用してヒット テストやその他のアクションを実行したりできます。 また、アプリケーションのコントロールでマウス入力を処理する方法を変更できます。 このトピックでは、これらのマウス イベントの詳細と、マウスのシステム設定を取得して変更する方法について説明します。 マウス イベントから与えられるデータと、マウス クリック イベントの発生順序に関する詳細については、「Windows フォームにおけるマウス イベント」を参照してください。

マウスの位置とヒットテスト

ユーザーがマウスを動かすと、オペレーティング システムによってマウス ポインターが移動します。 マウス ポインターには、ホット スポットと呼ばれる 1 つのピクセルが含まれています。これをオペレーティング システムがポインターの位置として追跡し、認識します。 ユーザーがマウスを動かすか、マウス ボタンを押すと、HotSpot を含む Control によって適切なマウス イベントが発生します。 マウス イベントを処理するか、または Cursor クラスの Position プロパティを使用すると、MouseEventArgsLocation プロパティで、現在のマウス位置を取得できます。 続いて、マウスの位置情報を使用してヒットテストを実行し、マウスの位置に基づいてアクションを実行できます。 ヒットテスト機能は、ListViewTreeViewMonthCalendarDataGridView コントロールなどの Windows フォームのいくつかのコントロールに組み込まれています。 ヒットテストは、MouseHover などの適切なマウスイベントと共に使用され、アプリケーションが特定のアクションを実行する必要があるかどうかを判断するのに非常に役立ちます。

マウス イベント

マウス入力に応答する主な方法は、マウス イベントを処理することです。 次の表には、マウス イベントとその発生タイミングに関する説明がまとめてあります。

マウス イベント 説明
Click このイベントは、マウス ボタンが離されたとき (通常は MouseUp イベントの前) に発生します。 このイベントのハンドラーは、型 EventArgs の引数を受け取ります。 このイベントは、クリックがいつ発生したかを判断する必要がある場合にのみ処理します。
MouseClick このイベントは、ユーザーがマウスでコントロールをクリックすると発生します。 このイベントのハンドラーは、型 MouseEventArgs の引数を受け取ります。 クリックが発生したときにマウスに関する情報を取得する必要がある場合に、このイベントを処理します。
DoubleClick このイベントは、コントロールがダブルクリックされたときに発生します。 このイベントのハンドラーは、型 EventArgs の引数を受け取ります。 このイベントは、ダブルクリックがいつ発生したかを判断する必要がある場合にのみ処理します。
MouseDoubleClick このイベントは、ユーザーがマウスでコントロールをダブルクリックすると発生します。 このイベントのハンドラーは、型 MouseEventArgs の引数を受け取ります。 ダブルクリックが発生したときにマウスに関する情報を取得する必要がある場合に、このイベントを処理します。
MouseDown このイベントは、マウス ポインターがコントロール上にあるときに、ユーザーがマウス ボタンを押すと発生します。 このイベントのハンドラーは、型 MouseEventArgs の引数を受け取ります。
MouseEnter このイベントは、コントロールの種類に応じて、マウス ポインターがコントロールの境界線またはクライアント領域に入ったときに発生します。 このイベントのハンドラーは、型 EventArgs の引数を受け取ります。
MouseHover このイベントは、マウス ポインターがコントロールの上に置かれたときに発生します。 このイベントのハンドラーは、型 EventArgs の引数を受け取ります。
MouseLeave このイベントは、コントロールの種類に応じて、マウス ポインターがコントロールの境界線またはクライアント領域から離れたときに発生します。 このイベントのハンドラーは、型 EventArgs の引数を受け取ります。
MouseMove このイベントは、マウス ポインターがコントロール上で動かされたときに発生します。 このイベントのハンドラーは、型 MouseEventArgs の引数を受け取ります。
MouseUp このイベントは、マウス ポインターがコントロール上にあり、ユーザーがマウス ボタンを離したときに発生します。 このイベントのハンドラーは、型 MouseEventArgs の引数を受け取ります。
MouseWheel このイベントは、このコントロールの上にフォーカスがある状態でユーザーがマウス ホイールを使用したときに発生します。 このイベントのハンドラーは、型 MouseEventArgs の引数を受け取ります。 MouseEventArgsDelta プロパティを使用して、マウスのスクロール距離を決定できます。

マウス入力の変更とシステム設定の検出

コントロールがマウス入力を処理する方法は、コントロールから派生させ、GetStyleSetStyle のメソッドを使用することで検出して変更することができます。 SetStyle メソッドは、ControlStyles 値のビットごとの組み合わせを取得して、コントロールに標準のクリックかダブルクリックの動作が含まれるかどうか、またはコントロールにより独自のマウス処理が行われるかどうかを決定します。 さらに、SystemInformation クラスには、マウスの機能を説明し、マウスがオペレーティング システムとどのように対話するかを指定するプロパティが含まれています。 次の表に、これらのプロパティを要約します。

プロパティ 説明
DoubleClickSize 2 回のクリックがダブルクリックであるとオペレーティング システムに認識されるために、ユーザーがクリックする 2 つの位置が含まれている必要がある範囲のサイズ (ピクセル単位) を取得します。
DoubleClickTime マウス操作がダブルクリックであるとオペレーティング システムに認識されるための、1 回目のクリックと 2 回目のクリックの間の最大経過時間 (ミリ秒単位) を取得します。
MouseButtons マウスのボタンの数を取得します。
MouseButtonsSwapped 左右のマウス ボタンの機能が入れ替わっているかどうかを示す値を取得します。
MouseHoverSize マウス静止メッセージが生成されるためにマウス静止時間が経過するまでマウス ポインターをとどめておく必要がある四角形の領域のサイズ (ピクセル単位) を取得します。
MouseHoverTime マウス静止メッセージが生成されるために静止領域内にマウス ポインターをとどめておく必要がある時間 (ミリ秒単位) を取得します。
MousePresent マウスが取り付けられているかどうかを示す値を取得します。
MouseSpeed 現在のマウスの速度を示す値 (1 から 20) を取得します。
MouseWheelPresent マウス ホイール付きのマウスが取り付けられているかどうかを示す値を取得します。
MouseWheelScrollDelta マウス ホイールの 1 目盛りの回転で増分される差分値を取得します。
MouseWheelScrollLines マウス ホイールを回転したときにスクロールする行数を取得します。

関連項目