使用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
。 - 将
TextBox
的Dock
属性设置为Fill
。
这样,中间列将展开以填充TableLayoutPanel
剩余空间。 现在,如果您希望TableLayoutPanel
占用Form
所有宽度,您可以将其Dock
属性设置为Fill
或Top
。 你也可以把它做大,并设置合适的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));