【问题标题】: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() - 即使用表单吗?
  • 添加了我的意思的一个例子

标签: c# .net drag-and-drop


【解决方案1】:

您可以使用Cursor.Position 获取光标坐标,这将为您获取屏幕坐标。然后你可以将这些传递给PointToClient(Point p)

Point screenCoords = Cursor.Position;
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);

不过,我相当肯定DragEventArgs.XDragEventArgs.Y 已经是屏幕坐标。你的问题可能出在

 if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)

这看起来像是在检查面板坐标,而e.Xe.Y 是此时的屏幕坐标。相反,在检查边界之前将其转换为面板坐标:

 Point screenCoords = Cursor.Position;
 Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);
 if (controlRelatedCoords.X < 429 && controlRelatedCoords.X > 0 && 
     controlRelatedCoords.Y < 430 && controlRelatedCoords.Y > 0)
 {

 }

【讨论】:

  • 但是在这种情况下,有些情况下,已拖动的图像的一部分可能在面板边框处不可见。因为光标可以指向面板中的任何位置。例如:当光标指向几乎靠近边界时。这就是为什么我要检查面板边框上的拖动点。有什么解决办法吗?
猜你喜欢
  • 1970-01-01
  • 2010-12-29
  • 2013-07-10
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2011-01-27
  • 2013-01-20
  • 2017-09-06
相关资源
最近更新 更多