停靠多个控件 – 一个填充剩余空间
我正在尝试将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完全正是我所说的: 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值,并且只是将三个按钮的大小设置为不同。