我知道如何获取光标的位置:
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
但是这是相对于屏幕的坐标。我如何获取相对于我的表单的坐标?
我知道如何获取光标的位置:
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
但是这是相对于屏幕的坐标。我如何获取相对于我的表单的坐标?
使用 Control.PointToClient
方法。假设 this
指向要操作的窗体:
var relativePoint = this.PointToClient(new Point(X, Y));
或者简单点说:
var relativePoint = this.PointToClient(Cursor.Position);
PointToClient
:Point p = yourForm.PointToClient(Cursor.Position);
//if calling it in yourForm class, just replace yourForm with this or simply remove it.
public Form()
{
InitializeComponent();
panel = new System.Windows.Forms.Panel();
panel.Location = new System.Drawing.Point(90, 150);
panel.Size = new System.Drawing.Size(200, 100);
panel.Click += new System.EventHandler(this.panel_Click);
this.Controls.Add(this.panel);
}
private void panel_Click(object sender, EventArgs e)
{
Point point = panel.PointToClient(Cursor.Position);
MessageBox.Show(point.ToString());
}
var cpos = Cursor.Position; MessageBox.Show(String.Format("{0}\n{1}", cpos, this.PointToClient(cpos)));
会给出两个不同的点。 - lc.