我们如何获得相对于窗口形式的位置?
Posted
技术标签:
【中文标题】我们如何获得相对于窗口形式的位置?【英文标题】:How can we get the location relative to window form? 【发布时间】:2011-01-20 13:07:39 【问题描述】:我正在实现一个可以在面板中拖放图像的应用程序,因此我想确保图像放置在面板中并且在拖放时可以看到整个图像。在这种情况下,我想当我进行拖放事件时获取当前光标位置。那么如何获取与面板相关的光标位置呢? 这里是面板拖拽事件的方法。
private void panel1_DragDrop(object sender, DragEventArgs e)
Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
if (c != null)
if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)
c.Location = this.panel1.PointToClient((new Point(e.X, e.Y)));**
this.panel1.Controls.Add(c);
【问题讨论】:
你想要 panel1.TopLevelControl.PointToClient() - 即使用表单吗? 添加了我的意思的一个例子 【参考方案1】:您可以使用Cursor.Position
获取光标坐标,这将为您获取屏幕坐标。然后你可以将这些传递给PointToClient(Point p)
Point screenCoords = Cursor.Position;
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);
不过,我相当肯定DragEventArgs.X
和DragEventArgs.Y
已经是屏幕坐标。你的问题可能出在
if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)
这看起来像是在检查面板坐标,而e.X
和e.Y
是此时的屏幕坐标。相反,在检查边界之前将其转换为面板坐标:
Point screenCoords = Cursor.Position;
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);
if (controlRelatedCoords.X < 429 && controlRelatedCoords.X > 0 &&
controlRelatedCoords.Y < 430 && controlRelatedCoords.Y > 0)
【讨论】:
但是在这种情况下,有些情况下,已拖动的图像的一部分可能在面板边框处不可见。因为光标可以指向面板中的任何位置。例如:当光标指向几乎靠近边界时。这就是为什么我要检查面板边框上的拖动点。有什么解决办法吗?以上是关于我们如何获得相对于窗口形式的位置?的主要内容,如果未能解决你的问题,请参考以下文章