2011-11-20 25 views
24

Chcę uzyskać pozycję myszy względem kontrolki, w której znajduje się wskaźnik myszy. Oznacza to, że gdy umieściłem kursor w punkcie początkowym (lewy górny róg) kontrolki, powinien on podać (0,0). Używam następującego kodu:Uzyskaj pozycję kursora względem kontrolki - C#

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

Ale to daje pozycję w odniesieniu do ekranu, nie do kontroli.

Próba kodu zostanie doceniona.

Odpowiedz

22

można bezpośrednio wykorzystać własność MouseEventArgs argumentu przekazanego do obsługi zdarzeń-Location.

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

Wystarczy odjąć od pozycji kursora w lewo i Top współrzędne kontrolą:

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

Może pracować dla formularzy najwyższego poziomu, ale nie będzie działać dla formantów w jednym: Control.Left to pozycja kontrolna względem jej * obszaru roboczego rodzica *, a nie ekranu. – BrendanMcK

36

Użyj Control.PointToClient, aby przekształcić punkt z współrzędnych ekranowych na współrzędne kontrolne. Jeśli chcesz przejść w drugą stronę, użyj PointToScreen.

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

Gdzie „Lienzo” to moja płyta płótno

2

Można użyć następujących metod uzyskiwania względnej od absolutny i bezwzględny od względnych współrzędnych:

Point Control.PointToClient(Point point); 

Point Control.PointToScreen(Point point); 
10

Poniższa daje współrzędne myszy względem twojej kontroli. Na przykład, skutkuje to (0,0), gdy mysz jest nad lewym górnym rogu sterowania:

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

używam MouseLocation i PointToClient sprawdzić. A potem użyj go w zegarku!

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

Świetne rozwiązanie. Dzięki stary....!! – user2700767

0

punkt zwrotny Cursor.Position na ekranie, a Control.PointToClient (Cursor.Position) powraca wskazują na kontroli (na przykład sterowania -> panel). W twoim przypadku masz e.Locate, który punkt zwrotu na kontroli.

Powiązane problemy