我们说我有自定义UserControl
。它包含TableLayoutPanel
,Dock
属性设置为Fill
。 TableLayoutPanel
有3行2列。在单元格(0,1)中,我有Panel
(Margin
3),其中包含TextBox
(Margin
3)。如何获得TextBox
相对于UserControl
的界限?手动测量它应该是X = 3和Y = 29,Width = TextBox.Width和Height = TextBox.Height。
答案 0 :(得分:1)
您可以使用此代码:
var c = textBox1;
var p1 = c.Parent.PointToScreen(c.Location);
var p2 = this.PointToScreen(new Point(0, 0));
var p = new Point(p1.X - p2.X, p1.Y - p2.Y);
var bounds = new Rectangle(p, c.Size);
我认为此代码在UserControl1
中执行,然后bounds
就是您要找的。 p>
在上面的代码中,p1
是textBox1
的屏幕位置,p2
是顶部容器的第一个点(UserControl1
)的屏幕位置。因此,这些点之间的差异是textBox1
的相对位置。然后由于大小不是相对的,因此边界将是new Rectangle(p, c.Size);
。
无论深度如何,代码都可以使用任何层次结构。