【发布时间】:2016-08-04 12:52:52
【问题描述】:
我正在尝试使 3 列 TableLayoutPanel 的中间列可扩展。作为学习练习,我从代码而不是设计人员开始做所有事情。
中间栏有一个文本框,左右栏各有一个按钮:
从截图可以看出,第二列还不能展开。
我遵循https://stackoverflow.com/a/22283690/492336 的建议 - 我将 TextBox 控件的 Dock 设置为 Fill,并将面板的 Dock 设置为 Fill:
var panel = new TableLayoutPanel();
panel.RowCount = 1;
panel.ColumnCount = 3;
panel.Controls.Add(new Button());
panel.Controls.Add(new TextBox());
panel.Controls.Add(new Button());
panel.Controls[0].Text = "Button1";
panel.Controls[2].Text = "Button2";
panel.Controls[1].Dock = DockStyle.Fill;
panel.Dock = DockStyle.Fill;
我还尝试了https://stackoverflow.com/a/7279996/492336 的建议,将列设置为AutoSize:
panel.ColumnStyles.Clear();
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
但这也没有效果。
我在这里做错了什么?
【问题讨论】:
-
查看您的代码并想知道究竟这些控件如何最终出现在正确的列中。您从不指定列号。查看如何正确编程 TLP 的最佳方法是在设计器中使用它并查看设计器生成的 InitializeComponent() 方法。你会发现Add() method overload。
-
@HansPassant 谢谢!我在另一个实验代码中检查过 - 它们从左到右然后从上到下,有点像你写的那样,如果没有足够的项目,最后一行仍然部分填充。无论如何,我更改了我的代码以使用另一个重载,但它没有效果。顺便说一句,我来自您在stackoverflow.com/a/3601011/492336 的回答 - 我正在尝试使用 TableLayoutPanel 作为 Qt 布局的替代品,它会在有意义时自动使小部件可扩展。
标签: c# winforms tablelayoutpanel