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

时间:2016-11-04 01:36:50

标签: c# .net winforms position

我们说我有自定义UserControl。它包含TableLayoutPanelDock属性设置为FillTableLayoutPanel有3行2列。在单元格(0,1)中,我有PanelMargin 3),其中包含TextBoxMargin 3)。如何获得TextBox相对于UserControl的界限?手动测量它应该是X = 3和Y = 29,Width = TextBox.Width和Height = TextBox.Height。

1 个答案:

答案 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就是您要找的。

在上面的代码中,p1textBox1的屏幕位置,p2是顶部容器的第一个点(UserControl1)的屏幕位置。因此,这些点之间的差异是textBox1的相对位置。然后由于大小不是相对的,因此边界将是new Rectangle(p, c.Size);

无论深度如何,代码都可以使用任何层次结构。