在标准WinForms面板上进行中心和拉伸

时间:2014-07-22 13:12:11

标签: c# winforms user-interface

所以,做我试图做的事情在WPF中是微不足道的,但在WinForms中似乎有点问题:

使用TableLayoutPanel时,只需将Anchor属性设置为NONE即可将控件置于TableLayoutPanel的单元格中心,然后在控件上设置Anchor.Right | Anchor.Left标志以将其拉伸到单元格的大小。使用标准WinForms Panel容器时,此行为似乎无法正常工作。在TextBox内的子控件(Panel)上设置Anchor属性时,控件似乎不会拉伸,也不会在容器中居中。

我已经找到了其他类似问题的答案,但我觉得我在这里遗漏了一些东西。他们中的大多数人都说只使用Anchor属性,但这似乎不起作用。这是否需要在加载时手动计算(并且每次调整大小),或者Anchor属性实际上可以帮助我吗?

2 个答案:

答案 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已经有一个专门用于此的页面。 (虽然这提到了一个按钮,但这个想法仍然相同)