查找控件相对于另一个控件的位置

Find position of a control relative to another control

假设我有一个自定义 UserControl。它包含 TableLayoutPanelDock 属性 设置为 FillTableLayoutPanel 有 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 就是你要找的。

在上面的代码中,p1textBox1 的屏幕位置,p2 是顶部容器 (UserControl1) 第一个点的屏幕位置。所以这些点的区别就是textBox1的相对位置。那么由于大小不是相对的,那么边界将是 new Rectangle(p, c.Size);.

无论深度如何,代码都适用于任何层次结构。