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

时间:2016-08-04 12:52:53

标签: c# winforms tablelayoutpanel

我正在尝试使3列TableLayoutPanel的中间列可扩展。我从代码而不是设计师那里做的一切都是学习练习。

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

enter image description here

从屏幕截图中可以看出,第二列尚未展开。

我正在遵循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;

我还通过将列设置为AutoSize来尝试https://stackoverflow.com/a/7279996/492336中的建议:

panel.ColumnStyles.Clear();
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));

但这也没有效果。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

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

  • 将第一列和最后一列样式设置为AutoSize
  • 将中间列样式设置为Percent,其值为100
  • Dock的{​​{1}}属性设置为TextBox

这样,中间列将展开以填充Fill的剩余空间。现在,如果您希望TableLayoutPanel占据TableLayoutPanel的所有宽度,则可以将其Form属性设置为DockFill。此外,您可以将其设置得更大,并为其设置合适的Top,以便根据Anchor尺寸更改其大小。

Form