コントロールの DoubleClick イベントでマウス カーソルの (x, y) 座標を取得する方法はありますか?
私が知る限り、位置はグローバルから取得する必要があります:
Windows.Forms.Cursor.Position.X、Windows.Forms.Cursor.Position.Y
また、ダブルクリックが発生したボタンを取得する方法はありますか?
コントロールの DoubleClick イベントでマウス カーソルの (x, y) 座標を取得する方法はありますか?
私が知る限り、位置はグローバルから取得する必要があります:
Windows.Forms.Cursor.Position.X、Windows.Forms.Cursor.Position.Y
また、ダブルクリックが発生したボタンを取得する方法はありますか?
DoubleClick イベントではなく、 MouseDoubleClickイベントを使用します。MouseDoubleClick は、プレーンな EventArgs ではなく、MouseEventArgs を提供します。これは、「クリック」ではなく「マウスクリック」にも当てはまります...そしてマウスを扱う他のすべてのイベント。
MouseDoubleClick は、マウスが本当にそこにあることを確認します。DoubleClick は別の原因で発生する可能性があり、マウス座標が役に立たない可能性があります - MSDN:「DoubleClick イベントは、コントロールの論理的に上位レベルのイベントです。ショートカット キーの組み合わせなど、他のユーザー アクションによって発生する可能性があります。」
注: danbruc が指摘したように、e は MouseEventArgs ではないため、これは UserControl では機能しません。また、すべてのコントロールが DoubleClick イベントを提供するわけではないことに注意してください。たとえば、Button は 2 つの Click イベントのみを送信します。
private void Form1_DoubleClick(object sender, EventArgs e)
{
MouseEventArgs me = e as MouseEventArgs;
MouseButtons buttonPushed = me.Button;
int xPos = me.X;
int yPos = me.Y;
}
フォームに相対的な x、y を取得します。
また、MouseEventArgs に左ボタンまたは右ボタンがあります。
Control.MousePosition と Control.MouseButtons が探しているものです。Control.PointToClient() および Control.PointToScreen() を使用して、画面とコントロールの相対座標を変換します。
詳細については、MSDN Control.MouseButtons プロパティ、Control.MousePosition プロパティ、Control.PointToClient メソッド、およびControl.PointToScreen メソッドを参照してください。
アップデート
木を見て木を見るのではなく... :D Mooseの答えを見て、イベントの引数を見てください。
このMSDN の記事には、コントロールに応じて、どのマウス アクションがどのイベントをトリガーするかが記載されています。
アップデート
Moose のキャストを見逃したので、これは機能しません。Control.DoubleClick() 内から静的な Control プロパティを使用する必要があります。ボタン情報はビット フィールドとしてエンコードされるため、目的のボタンを使用して次のようにテストする必要があります。
(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left