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

我正在尝试将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); 

产生这个:

按钮3填充整个父母

正如您所看到的,Button 3完全正是我所说的: Fill父级。 但这不是我想要的 。 除了手动放置和处理resize事件等外,如何让Button 3填充剩余空间?

注意:我没有使用设计师。

虽然添加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); 

结果:

在此处输入图像描述

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

基本上应该首先在Controls集合中添加DockStyle.Fill Controls

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

 b3.BringToFront(); 

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

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

此外,您可以将dock属性设置为所有三个的top值,并且只是将三个按钮的大小设置为不同。