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

标签 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

如您所见,Button 3 完全按照我的指示执行:Fill parent。但这不是我想要它做的。除了手动放置和处理调整大小事件等,如何让 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);

结果:

enter image description here

如果您仔细观察这个小示例中的边框,您会发现这实际上比 BringToFront() 效果更好。

关于c# - 停靠多个控件 - 一个填充剩余空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749408/

相关文章:

c# - Visual Studio 2015 中 Visual c# block 注释的键盘快捷方式?

c# - CancellationTokens 可以跨 AppDomains 使用吗

c# - Process.从用户机器开始

c# - 如何在不同的线程上更改窗体的窗口状态?

c# - 没有 MVC 的 SignalR?

c# - VS 和 Rider 忽略源生成器生成的文件

c# - 防止字符串中出现西里尔文/希腊文/中文 - C# 4.0

c# - .NET 在运行时之前创建一个大小未知的数组(或更好的数组切片方式)

c# - 为什么我无法编译在 C# 的类接口(interface)中声明的自定义事件

c# - Index-1 没有值