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

Jon*_*art 21 .net c# 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);
Run Code Online (Sandbox Code Playgroud)

产生这个:

按钮3填充整个父母

正如您所看到的,Button 3正在完成我告诉它的内容:Fill父母.但这不是我想要的.除了手动放置和处理调整大小事件等外,如何让Button 3填充剩余空间?

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

Jon*_*art 27

虽然添加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);
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

如果你仔细看看这个小例子中的边框,这实际上看起来效果BringToFront().

  • 如果你在button3上并单击"Brint to Front",它就会为你完成. (2认同)

vez*_*kov 6

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


Jay*_*ggs 5

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

b3.BringToFront();
Run Code Online (Sandbox Code Playgroud)