C# 我们如何获得相对于窗口窗体的位置?
我正在实现一个可以在面板中拖放图像的应用程序,因此我希望确保图像放置在面板中,并且在拖放时整个图像可见。在这种情况下,我希望在执行拖放事件时获取当前光标位置。那么,如何获取与面板相关的光标位置呢? 下面是面板dragdrop事件的方法C# 我们如何获得相对于窗口窗体的位置?,c#,.net,drag-and-drop,C#,.net,Drag And Drop,我正在实现一个可以在面板中拖放图像的应用程序,因此我希望确保图像放置在面板中,并且在拖放时整个图像可见。在这种情况下,我希望在执行拖放事件时获取当前光标位置。那么,如何获取与面板相关的光标位置呢? 下面是面板dragdrop事件的方法 private void panel1_DragDrop(object sender, DragEventArgs e) { Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
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);
}
}
}
private void panel1\u DragDrop(对象发送方,DragEventArgs e)
{
控件c=e.Data.GetData(e.Data.GetFormats()[0])作为控件;
如果(c!=null)
{
如果(e.X<429&&e.X>0&&e.Y0)
{
c、 位置=此.panel1.PointToClient((新点(e.X,e.Y))**
本附录1.控件添加(c);
}
}
}
您可以使用cursor.Position
获取光标坐标,这将获取屏幕坐标。然后您可以将它们传递到PointToClient(p点)
不过,我相当确定DragEventArgs.X
和DragEventArgs.Y
已经是屏幕坐标。你的问题可能在于
if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)
是否希望panel1.TopLevelControl.PointToClient()-即使用表单?添加了一个示例,说明我的意思,但在这种情况下,拖动的图像的一部分可能在面板的边框处不可见。因为光标可以指向面板中的任何位置。当光标指向边界附近时。这就是为什么我要对照面板边框检查拖动的点。有什么解决办法吗?
if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)
Point screenCoords = Cursor.Position;
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);
if (controlRelatedCoords.X < 429 && controlRelatedCoords.X > 0 &&
controlRelatedCoords.Y < 430 && controlRelatedCoords.Y > 0)
{
}