Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们如何获得相对于窗口窗体的位置?_C#_.net_Drag And Drop - Fatal编程技术网

C# 我们如何获得相对于窗口窗体的位置?

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;

我正在实现一个可以在面板中拖放图像的应用程序,因此我希望确保图像放置在面板中,并且在拖放时整个图像可见。在这种情况下,我希望在执行拖放事件时获取当前光标位置。那么,如何获取与面板相关的光标位置呢? 下面是面板dragdrop事件的方法

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)
 {

 }