7

コントロールの DoubleClick イベントでマウス カーソルの (x, y) 座標を取得する方法はありますか?

私が知る限り、位置はグローバルから取得する必要があります:

Windows.Forms.Cursor.Position.X、Windows.Forms.Cursor.Position.Y

また、ダブルクリックが発生したボタンを取得する方法はありますか?

4

3 に答える 3

15

DoubleClick イベントではなく、 MouseDoubleClickイベントを使用します。MouseDoubleClick は、プレーンな EventArgs ではなく、MouseEventArgs を提供します。これは、「クリック」ではなく「マウスクリック」にも当てはまります...そしてマウスを扱う他のすべてのイベント。

MouseDoubleClick は、マウスが本当にそこにあることを確認します。DoubleClick は別の原因で発生する可能性があり、マウス座標が役に立たない可能性があります - MSDN:「DoubleClick イベントは、コントロールの論理的に上位レベルのイベントです。ショートカット キーの組み合わせなど、他のユーザー アクションによって発生する可能性があります。」

于 2010-08-04T04:18:48.573 に答える
10

注: 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 に左ボタンまたは右ボタンがあります。

于 2009-03-27T18:25:41.510 に答える
6

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
于 2009-03-27T18:18:37.003 に答える