2011-11-20 3 views
24

마우스 포인터가있는 컨트롤과 관련하여 마우스 위치를 가져 오려고합니다. 즉, 컨트롤의 시작점 (왼쪽 위 모서리)에 커서를 놓으면 (0,0)을 지정해야합니다. 다음 코드를 사용하고 있습니다 :컨트롤에 대해 커서 위치 가져 오기 - C#

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

그러나 이것은 컨트롤이 아닌 화면에 대한 위치를 나타냅니다.

코드 샘플을 보내 주시면 감사하겠습니다.

답변

22

당신은 직접 이벤트 핸들러에 전달되는 MouseEventArgs 인수의 Location 속성을 사용할 수 있습니다.

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을 사용하십시오. "lienzo는"내 캔버스 패널입니다

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); 
} 

2

한 상대 좌표에서 절대 절대에서 상대 가져 오기위한 방법을 다음 사용할 수 있습니다 : 다음은 당신의 마우스 좌표를 줄 것이다

Point Control.PointToClient(Point point); 

Point Control.PointToScreen(Point point); 
10

을 귀하의 컨트롤에 상대적으로.

var coordinates = yourControl.PointToClient(Cursor.Position); 
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) 반환 컨트롤 (예를 들어, 제어 -> 패널)을 가리 킵니다. 귀하의 경우, 귀사는 귀사가 통제 할 수있는 귀환 지점을 찾았습니다.

관련 문제