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é.
8 réponses
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.
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);
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);
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);
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;
}
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
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.