Erl*_* D. 65 c# controls winforms
当控件可能在其他控件(如Panel)中时,有没有办法检索控件在窗体中的位置?
控件的Left和Top属性只给出了它在父控件中的位置,但如果我的控件位于五个嵌套面板中,我需要它在窗体上的位置怎么办?
快速举例:
按钮btnA位于面板pnlB内的坐标(10,10)上.
面板pnlB位于形式frmC内的坐标(15,15)上.
我想要btnA在frmC上的位置,这是(25,25).
我可以获得这个位置吗?
Fre*_*örk 89
我通常结合PointToScreen并PointToClient:
Point locationOnForm = control.FindForm().PointToClient(
control.Parent.PointToScreen(control.Location));
Run Code Online (Sandbox Code Playgroud)
你可以走过父母,注意他们在父母的位置,直到你到达表格.
编辑:像(未经测试)的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Supergeek,你的非递归函数没有产生正确的结果,但我的确如此.我相信你的增加了太多了.
private Point LocationOnClient(Control c)
{
Point retval = new Point(0, 0);
for (; c.Parent != null; c = c.Parent)
{ retval.Offset(c.Location); }
return retval;
}
Run Code Online (Sandbox Code Playgroud)