停靠多个控件 - 一个填充剩余空间

时间:2011-10-13 04:17:34

标签: c# .net winforms

我正在尝试将N个控件停靠在容器中。我希望他们都填满整个宽度,但堆叠。我想要一个特定的控件(当前是最后一个)来填充剩余的空间,而其他所有控件都有固定的大小。

此:

Button b1 = new Button() { Text = "Button 1", Dock = DockStyle.Top };
Button b2 = new Button() { Text = "Button 2", Dock = DockStyle.Top };
Button b3 = new Button() { Text = "Button 3", Dock = DockStyle.Fill };

Controls.Add(b1);
Controls.Add(b2);
Controls.Add(b3);

产生这个:

Button 3 filling entire parent

正如您所看到的,按钮3完全正是我所说的:Fill父母。但那不是我想要的它要做的事情。除了手动放置和处理调整大小事件等外,如何让Button 3填充剩余空间?

注意:我使用设计师。

4 个答案:

答案 0 :(得分:25)

虽然添加b3.BringToFront()(在添加到Controls之后)工作,但这里最简单的解决方案是简单地更改按钮添加到Controls的顺序。以下代码完美无缺:

Button b1 = new Button() { Text = "Button 1", Dock = DockStyle.Top };
Button b2 = new Button() { Text = "Button 2", Dock = DockStyle.Top };
Button b3 = new Button() { Text = "Button 3", Dock = DockStyle.Fill };

Controls.Add(b3);    // this guy first!
Controls.Add(b1);
Controls.Add(b2);

结果:

enter image description here

如果你仔细看看这个小例子中的边框,这实际上似乎比BringToFront() 更好

答案 1 :(得分:6)

基本上DockStyle.Fill控件应首先添加到Controls集合中。

答案 2 :(得分:5)

使用设计器中Button 3上的Bring to Front,或者调用此代码:

b3.BringToFront();

答案 3 :(得分:-1)

按钮1和2应将dock属性设置为top,并使按钮3占用剩余空间,您可以将其dock属性设置为bottom。

dock = fill将使按钮填满整个空间而不仅仅是剩余的空间。底部将像顶部一样起作用,但将其锚定到父容器的底部。按顺序应用按钮1,2,3。

此外,你可以将dock属性设置为所有三个的top,只需将三个按钮设置为不同。