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

我正在尝试使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; 

我还通过将列设置为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)); 

但这也没有效果。

我在这做错了什么?

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

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

这样,中间列将展开以填充TableLayoutPanel剩余空间。 现在,如果您希望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));