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

C# 停靠多个控件-一个控件填充剩余空间,c#,.net,winforms,C#,.net,Winforms,我试图在一个容器中停靠N个控件。我希望它们都能填满整个宽度,但不能堆叠。我想要一个特定的控件(目前是最后一个)来填充剩余的空间,而所有其他控件都有固定的大小 这: 产生以下结果: 正如您所看到的,按钮3正按照我告诉它的那样执行:Fillthe parent。但这不是我想要它做的。除了手动放置和处理调整大小事件等,我如何使按钮3填充剩余空间 注意:我没有使用设计器。在设计器中的按钮3上使用“带到前面”,或调用以下代码: b3.BringToFront(); 添加b3.BringToFront(

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

这:

产生以下结果:

正如您所看到的,按钮3正按照我告诉它的那样执行:
Fill
the parent。但这不是我想要它做的。除了手动放置和处理调整大小事件等,我如何使按钮3填充剩余空间


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

在设计器中的按钮3上使用“带到前面”,或调用以下代码:

b3.BringToFront();

添加
b3.BringToFront()
(添加到
控件
后)时,最简单的解决方案是更改按钮添加到
控件
的顺序。以下代码可以完美地工作:

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()更有效

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

按钮1和按钮2应将dock属性设置为顶部,并使按钮3占据剩余空间,您可以将其dock属性设置为底部

dock=fill将使按钮填充整个空间,而不仅仅是剩余空间。Bottom的功能与top相同,但将其锚定到父容器的底部。按1、2、3的顺序应用按钮


此外,您可以将dock属性设置为所有三个按钮的顶部,只需调整按钮三的大小即可。

请参见[此处][1]。这是一个复制品。[1] :谢谢你给我指出Z顺序。我知道这会影响它们的停靠顺序(尤其是
DockStyle.Top
的停靠顺序),但我没有想到移动
DockStyle.Fill控件。看看我的答案,换个角度看。是的,这是正确的答案。Z顺序很重要。您也可以在IDE中执行此操作。此外,建议在布局中使用面板。如果您点击按钮3并单击“Brint to Front”,它将为您准确地执行此操作。这仅在您使用设计器时有效,而在本例中,我不是。是否有办法在按钮之间设置间距?带填充/边距?WinForms没有堆栈面板。面板、FlowLayoutPanel和TableLayoutPanel是您的选择。很抱歉,刚刚从WPF项目lol中退出。编辑为正确。FlowLayoutPanel不会做同样的事情吗?它是流动的,但当dock设置为top时,子控件的宽度将等于父容器的宽度,以便它们正确显示流动。只是想跳出框框思考一下。
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);