C#获取控件在表单上的位置

当控件可能位于其他控件(如面板)中时,是否有任何方法可以检索控件在窗体中的位置?

控件的Left和Top属性只给出了它在父控件中的位置,但如果我的控件位于五个嵌套面板内,并且我需要它在表单上的位置,该怎么办?

快速示例:

按钮btnA位于面板pnlB内的坐标(10,10)上。
面板pnlB位于形式frmC内的坐标(15,15)上。

我想要btnA在frmC上的位置,这是(25,25)。

我可以得到这个位置吗?


我通常结合使用PointToScreenPointToClient

Point locationOnForm = control.FindForm().PointToClient(
    control.Parent.PointToScreen(control.Location));

您可以使用控件PointToScreen方法获取相对于屏幕的绝对位置。

您可以使用Forms PointToScreen方法,并使用基础数学来获取控件的位置。


你可以走过父母,注意他们在父母的位置,直到你到达表格。

编辑:类似(未经测试):

public Point GetPositionInForm(Control ctrl)
{
   Point p = ctrl.Location;
   Control parent = ctrl.Parent;
   while (! (parent is Form))
   {
      p.Offset(parent.Location.X, parent.Location.Y);
      parent = parent.Parent;
   }
   return p;
}
链接地址: http://www.djcxy.com/p/58365.html

上一篇: C# Get a control's position on a form

下一篇: How do I determine which monitor my .NET Windows Forms program is running on?