使用 TableLayoutPanel 的可扩展列(来自代码)

Expandable column using TableLayoutPanel (from code)

我正在尝试使 3 列 TableLayoutPanel 的中间列可扩展。作为学习练习,我从代码而不是设计人员开始做所有事情。

中间栏有一个文本框,左右栏各有一个按钮:

从截图中可以看出,第2列还不能展开。

我遵循 的建议 - 我将 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;

我还尝试了 的建议,将列设置为 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));

但这也没有效果。

我做错了什么?

如果您希望中间的列展开并占据 TableLayoutPanel 中所有剩余的 space,请在您的控件上执行此设置:

  • 将第一个和最后一个列样式设置为AutoSize
  • 将中间栏样式设置为 Percent,值为 100
  • TextBoxDock属性设为Fill

这样中间的列将扩展以填充 TableLayoutPanel 中剩余的 space。现在如果你想TableLayoutPanel占满Form的所有宽度,你可以将Dock属性设置为FillTop。您也可以将其放大并设置合适的 Anchor 以根据 Form 大小更改其大小。

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;

panel.ColumnStyles.Clear();
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100)); // This is the changed part
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));