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é.
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;
}
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.
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);
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 Gauche et Haut du contrôle:
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;
}
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.
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