Obtener la posición del cursor con respecto al control-C#


Quiero obtener la posición del ratón con respecto al control en el que está presente el puntero del ratón. Eso significa que cuando coloco el cursor en el punto de partida (Esquina Superior izquierda) de control debe dar (0,0). Estoy usando el siguiente código:

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

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

Se apreciará la muestra de código.

Author: Ani, 2011-11-20

8 answers

Puede utilizar directamente el Location propiedad del argumento MouseEventArgs pasado a su controlador de eventos.

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    Text = e.Location.X + ":" + e.Location.Y;      
} 
 23
Author: Ani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-20 12:32:40

Use Control.PointToClient para convertir un punto de coordenadas relativas a la pantalla a coordenadas relativas al control. Si necesitas ir por el otro lado, usa PointToScreen.

 37
Author: BrendanMcK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-20 12:42:45

Lo siguiente le dará coordenadas del ratón relativas a su control. Por ejemplo, esto resulta en (0,0) si el ratón está sobre la esquina superior izquierda del control:

var coordinates = yourControl.PointToClient(Cursor.Position);
 12
Author: Justas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-13 04:12:14

Uno puede usar los siguientes métodos para obtener el relativo desde el absoluto y el absoluto desde las coordenadas relativas:

Point Control.PointToClient(Point point);

Point Control.PointToScreen(Point point);
 2
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 14:08:14

Simplemente reste de la posición del cursor las coordenadas izquierda y superior del control:

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" +
    Cursor.Position.Y - this.Top);
 1
Author: BlackBear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-20 11:58:01

Utilizo MouseLocation y PointToClient para 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;
        }
 1
Author: Huỳnh Hữu Ân,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-31 03:25:49
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 lienzo

 0
Author: Pichitron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-30 19:13:56

Cursor.Posición del punto de retorno en pantalla, pero Control.PointToClient (Cursor.Posición) devuelve el punto en el control (por ejemplo, control - > panel). En su caso, usted tiene e.Localice qué punto de retorno en el control.

 0
Author: ndukan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-03 15:14:09