2011-11-20 28 views
24

Quiero obtener la posición del mouse con respecto al control en el que está el puntero del mouse. Eso significa que cuando coloque el cursor en el punto de inicio (esquina superior izquierda) de control debería dar (0,0). Estoy usando el siguiente código:Obtener la posición del cursor con respecto al control - C#

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

Pero esto le da la posición con respecto a la pantalla no al control.

La muestra del código será apreciada.

Respuesta

22

Usted puede utilizar la propiedad Location del argumento MouseEventArgs pasado a su controlador de eventos directamente.

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

sólo hay que restar de la posición del cursor de la izquierda y Top coordenadas del control:

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

Puede funcionar para Formularios de nivel superior, pero no funcionará para controles dentro de uno: Control. Izquierda es la posición del control en relación con su * área de cliente principal *, no la pantalla. – BrendanMcK

36

Uso Control.PointToClient Para convertir un punto de coordenadas de pantalla-relación con el control-relativos coords. Si necesita ir por el otro lado, use 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); 
} 

Donde "lienzo" es mi panel de la lona

2

Uno puede utilizar después de los métodos para obtener la relación de absoluta y absoluta de coordenadas relativas:

Point Control.PointToClient(Point point); 

Point Control.PointToScreen(Point point); 
10

A continuación se le entrega los coordenadas del ratón relativo a tu control. Por ejemplo, esto resulta en (0,0) si ratón está sobre la esquina superior izquierda del control:

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

utilizo MouseLocation y PointToClient comprobar. ¡Y luego usarlo en un temporizador!

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

Gran solución. Gracias amigo....!! – user2700767

0

punto de retorno Cursor.Position en la pantalla, pero Control.PointToClient (Cursor.Position) devuelve señalan en el control (control por ejemplo -> Panel). En su caso, tiene e.Localizar qué punto de retorno en el control.

Cuestiones relacionadas