2011-11-20 17 views
24

マウスポインタが存在するコントロールに対してマウスの位置を取得したい。つまり、コントロールの開始点(左上隅)にカーソルを置くと、(0,0)を指定する必要があります。私は次のコードを使用しています:コントロールに対してカーソル位置を取得する - C#

private void panel1_MouseMove(object sender, MouseEventArgs e) 
    { 
     this.Text = Convert.ToString(Cursor.Position.X + ":" + Cursor.Position.Y);   
    } 

しかし、これはコントロールに対してではなく、画面に対する位置を示します。

コードサンプルは高く評価されます。

答えて

22

あなたが直接あなたのイベントハンドラに渡される引数MouseEventArgsLocationプロパティを使用することができます。

private void panel1_MouseMove(object sender, MouseEventArgs e) 
{ 
    Text = e.Location.X + ":" + e.Location.Y;  
} 
1

は、単にカーソル位置からコントロールの左と上の座標を引く:

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" + 
    Cursor.Position.Y - this.Top); 
+3

トップレベルのフォームでは機能しますが、コントロール内のコントロールでは機能しません。Control.Leftは、スクリーンではなく親のクライアント領域*に対するコントロールの位置です。 – BrendanMcK

36

Control.PointToClientを使用して、画面相対座標から制御相対座標にポイントを変換します。逆の場合は、PointToScreenを使用します。

Point Control.PointToClient(Point point); 

Point Control.PointToScreen(Point point); 
0
private void lienzo_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e) 
{ 
    Point coordenadas = new Point(); 
    coordenadas = Mouse.GetPosition(lienzo); 

    string msg = "Coordenadas mouse :" + coordenadas.X + "," + coordenadas.Y; 
    MessageBoxResult resultado; 
    string titulo = "Informacion"; 
    MessageBoxButton botones = MessageBoxButton.OK; 
    MessageBoxImage icono = MessageBoxImage.Information; 

    resultado = MessageBox.Show(msg, titulo, botones, icono); 
} 

あなたのコントロールに対して

var coordinates = yourControl.PointToClient(Cursor.Position); 
2

一つは、相対座標から絶対絶対から相対を取得するための次の方法を使用することができ、私のキャンバスパネルで

10

以下は、あなたのマウスの座標を与える:「lienzoは」

1

私がチェックしMouseLocationとPointToClientを使用:マウスがコントロールの左上隅の上にある場合たとえば、これは、(0,0)になります。そしてそれをタイマーで使ってください!

bool IsMouseHover(Control c, Control container) 
     { 
      Point p = Control.MousePosition; 
      Point p1 = c.PointToClient(p); 
      Point p2 = container.PointToClient(p); 
      if (c.DisplayRectangle.Contains(p1) && container.DisplayRectangle.Contains(p2)) 
      { 
       return true; 
      } 
      return false; 
     } 
+0

すばらしい解決策。ありがとう....!! – user2700767

0

は、画面上の点を返すCursor.Positionが、Control.PointToClient(Cursor.Position)戻るコントロール(例えばコントロール - >パネル)上の点。あなたの場合、e.Locateを持っています。

関連する問題