web-dev-qa-db-fra.com

Obtenir la position du curseur par rapport au contrôle - C #

Je veux obtenir la position de la souris par rapport au contrôle dans lequel le pointeur de la souris est présent. Cela signifie que lorsque je place le curseur sur le point de départ (coin supérieur gauche) du contrôle, il doit donner (0,0). J'utilise le code suivant:

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

Mais cela donne la position par rapport à l'écran et non au contrôle.

Un échantillon de code sera apprécié.

29
Farid-ur-Rahman

Vous pouvez directement utiliser la propriété Location de l'argument MouseEventArgs passé à votre gestionnaire d'événements.

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

Utilisez Control.PointToClient pour convertir un point des coordonnées relatives à l'écran en coordonnées relatives au contrôle. Si vous devez aller dans l'autre sens, utilisez PointToScreen.

42
BrendanMcK

Ce qui suit vous donnera les coordonnées de la souris par rapport à votre contrôle. Par exemple, cela se traduit par (0,0) si la souris se trouve dans le coin supérieur gauche du contrôle:

var coordinates = yourControl.PointToClient(Cursor.Position);
15
Justas

On peut utiliser les méthodes suivantes pour obtenir le relatif de l'absolu et l'absolu des coordonnées relatives:

Point Control.PointToClient(Point point);

Point Control.PointToScreen(Point point);
3
Chris

Soustrayez simplement de la position du curseur les coordonnées Gauche et Haut du contrôle:

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

J'utilise MouseLocation et PointToClient pour vérifier. Et puis utilisez-le dans une minuterie!

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
Huỳnh Hữu Ân

Cursor.Position renvoie le point sur l'écran, mais Control.PointToClient (Cursor.Position) renvoie le point sur le contrôle (par exemple, contrôle -> panneau). Dans votre cas, vous avez e.Locate qui renvoie le point sur le contrôle.

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

Où "lienzo" est mon panneau de toile

0
Pichitron