查找控件相对于另一个控件的位置
Find position of a control relative to another control
假设我有一个自定义 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.
您可以使用此代码:
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
就是你要找的。
在上面的代码中,p1
是 textBox1
的屏幕位置,p2
是顶部容器 (UserControl1
) 第一个点的屏幕位置。所以这些点的区别就是textBox1
的相对位置。那么由于大小不是相对的,那么边界将是 new Rectangle(p, c.Size);
.
无论深度如何,代码都适用于任何层次结构。
假设我有一个自定义 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.
您可以使用此代码:
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
就是你要找的。
在上面的代码中,p1
是 textBox1
的屏幕位置,p2
是顶部容器 (UserControl1
) 第一个点的屏幕位置。所以这些点的区别就是textBox1
的相对位置。那么由于大小不是相对的,那么边界将是 new Rectangle(p, c.Size);
.
无论深度如何,代码都适用于任何层次结构。