2011-11-20 13 views
24

Voglio ottenere la posizione del mouse rispetto al controllo in cui è presente il puntatore del mouse. Ciò significa che quando metto il cursore sul punto iniziale (angolo superiore sinistro) del controllo dovrebbe dare (0,0). Sto usando il seguente codice:Ottieni la posizione del cursore rispetto al controllo - C#

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

Ma questo dà la posizione rispetto allo schermo non al controllo.

Il campione di codice sarà apprezzato.

risposta

22

È possibile utilizzare direttamente la proprietà Location dell'argomento MouseEventArgs passato al gestore di eventi.

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

sufficiente sottrarre dalla posizione del cursore sinistra e in alto le coordinate del controllo:

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

Può funzionare per moduli di livello superiore, ma non funziona per i controlli all'interno di uno: Control.Left è la posizione del controllo relativa all'area client * del suo genitore *, non lo schermo. – BrendanMcK

36

Usa Control.PointToClient Per convertire un punto da coordinate relativa allo schermo per il controllo-relative coordinate. Se devi andare dall'altra parte, usa 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); 
} 

Dove "lienzo" è il mio pannello di tela

2

si possono usare i seguenti metodi per ottenere il relativo dalla assoluta e assoluta da coordinate relative:

Point Control.PointToClient(Point point); 

Point Control.PointToScreen(Point point); 
10

Di seguito vi darà voi coordinate del mouse relativo al tuo controllo. Ad esempio, questo si traduce in (0,0) se mouse è sopra alto a sinistra del controllo:

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

Io uso MouseLocation e PointToClient controllare. E poi usalo in un timer!

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

Ottima soluzione. Grazie compagno....!! – user2700767

0

punto di ritorno Cursor.Position sullo schermo, ma Control.PointToClient (Cursor.Position) restituisce puntano sul controllo (ad esempio, il controllo -> pannello). Nel tuo caso, hai e.Locate quale punto di ritorno sul controllo.