获取相对于控件的光标位置 – C#

我想获得鼠标指针所在的控件的鼠标位置。 这意味着当我将光标放在控件的起点(左上角)时,它应该给出(0,0)。 我使用以下代码:

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

但是这给出了关于屏幕而不是控制的位置。

代码示例将不胜感激。

您可以直接使用传递给事件处理程序的MouseEventArgs参数的Location属性。

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

使用Control.PointToClient将点从屏幕相对坐标转换为控制相对坐标。 如果您需要采用其他方式,请使用PointToScreen。

以下内容将为您提供相对于您的控件的鼠标坐标。 例如,如果鼠标位于控件的左上角,则会产生(0,0):

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

可以使用以下方法从相对坐标获取绝对和绝对的相对:

 Point Control.PointToClient(Point point); Point Control.PointToScreen(Point point); 

只需从光标位置减去控件的Left和Top坐标:

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

我使用MouseLocation和PointToClient进行检查。 然后在计时器中使用它!

 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返回屏幕上的Point,但Control.PointToClient(Cursor.Position)返回控件上的点(例如control – > panel)。 在你的情况下,你有e.Locate控制哪个返回点。

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

“lienzo”是我的帆布面板