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 au point de départ (coin supérieur gauche) du contrôle, il doit donner (0,0). Je suis en utilisant le code suivant:

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

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

exemple de Code sera apprécié.

26
demandé sur Ani 2011-11-20 15:49:35

8 réponses

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

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    Text = e.Location.X + ":" + e.Location.Y;      
} 
23
répondu Ani 2011-11-20 12:32:40

Utiliser de Contrôle.PointToClient pour convertir un point de screen-relative coords en contrôle-relative coords. Si vous avez besoin d'aller dans l'autre sens, utilisez Pointttoscreen.

37
répondu BrendanMcK 2011-11-20 12:42:45

ce qui suit vous donnera les coordonnées de la souris par rapport à votre contrôle. Par exemple, cela donne (0,0) si la souris est au-dessus du coin supérieur gauche de la commande:

var coordinates = yourControl.PointToClient(Cursor.Position);
12
répondu Justas 2014-10-13 04:12:14

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);
2
répondu Chris 2014-02-19 14:08:14

soustrayez simplement de la position du curseur les coordonnées de gauche et du haut de la commande:

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" +
    Cursor.Position.Y - this.Top);
1
répondu BlackBear 2011-11-20 11:58:01

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
répondu Huỳnh Hữu Ân 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);
}

où "lienzo" est mon panneau de toile

0
répondu Pichitron 2012-12-30 19:13:56

Curseur.Point de retour de Position à L'écran, mais Contrôle.PointToClient (Curseur.Position) renvoie le point sur la commande (par exemple control -> panel). Dans votre cas, vous avez E. Localisez le point de retour du contrôle.

0
répondu ndukan 2016-08-03 15:14:09