所以,做我试图做的事情在WPF中是微不足道的,但在WinForms中似乎有点问题:
使用TableLayoutPanel时,只需将Anchor属性设置为NONE即可将控件置于TableLayoutPanel的单元格中心,然后在控件上设置Anchor.Right | Anchor.Left
标志以将其拉伸到单元格的大小。使用标准WinForms Panel
容器时,此行为似乎无法正常工作。在TextBox
内的子控件(Panel
)上设置Anchor属性时,控件似乎不会拉伸,也不会在容器中居中。
我已经找到了其他类似问题的答案,但我觉得我在这里遗漏了一些东西。他们中的大多数人都说只使用Anchor属性,但这似乎不起作用。这是否需要在加载时手动计算(并且每次调整大小),或者Anchor属性实际上可以帮助我吗?
答案 0 :(得分:1)
仅当您将控件与锚点组合拉伸时,才能自动保持控件居中。 如果你想让它居中而不拉伸它你就必须在Resize事件中做一些小的数学运算:
private void tableLayoutPanel1_Resize(object sender, EventArgs e)
{
yourControl.Left = (yourControl.Parent.ClientSize.Width - yourControl.Width) / 2;
}
对于垂直居中,适用相同的规则。
关于消失的ErrorProvider:ErrorProviders需要一点空间,在我的机器上会有12个像素。要为TableLayoutPanel中最右边的单元格提供该空间,可以像这样设置其填充:
this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 12, 0);
请注意,如果你有任何填充,可以很好地添加Cellborders之间的填充,以及外部填充。
答案 1 :(得分:0)
似乎MSDN已经有一个专门用于此的页面。 (虽然这提到了一个按钮,但这个想法仍然相同)