日期:2014-05-18  浏览次数:21359 次

C# 窗体的 Location 是什么意思
FrmInfo frm = new FrmInfo();
Point MousePos = Control.MousePosition;
frm.Location = new Point(MousePos.X + 30, MousePos.Y + 30);
frm.Show();

以上是我的代码
我想实现的是:
我鼠标不管点击哪里
FrmInfo 窗体都是鼠标点击处的右下角
但是上面的代码却实现不了  
我也不知道哪里错了
请高手指点下

------解决方案--------------------
Location 属性:控件的左上角相对于其容器的左上角的坐标。
由于 Point 类是值类型(在 Visual Basic 中是 Structure,在 Visual C# 中是 struct),它按传值方式返回,意味着访问该属性将返回控件的左上点的副本。因此,调整从该属性返回的 Point 的 X 或 Y 属性将不影响控件的 Left、Right、Top 或 Bottom 属性值。若要调整这些属性,请分别设置每个属性值,或用新的 Point 设置 Location 属性。

如果 Control 是 Form,那么 Location 属性值表示 Form 的左上角(以屏幕坐标表示)。
------解决方案--------------------
恩,同时1楼的说法,你可以在鼠标点击事件中去重新设置位置。
------解决方案--------------------
这个好像要用系统钩子吧,不然你在窗体外面点击了怎么跟随?
------解决方案--------------------
明显如果离开FROM的范围在点 就不属于你APP的消息了.
需要全局钩子来处理


------解决方案--------------------
form的位置.
是相对parent的位置.
------解决方案--------------------
你应该转化成屏幕坐标后再付给
frm.Location 

你现在付的坐标值是相对当前窗口内部的坐标值。

也可以这样写

FrmInfo frm = new FrmInfo(); 
Point MousePos = Control.MousePosition; 
frm.Location = new Point(this.Location.x + MousePos.X + 30, this.Location.y + MousePos.Y + 30); 
frm.Show();