使用 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
。
- 将
TextBox
的Dock
属性设为Fill
。
这样中间的列将扩展以填充 TableLayoutPanel
中剩余的 space。现在如果你想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));
我正在尝试使 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
。 - 将
TextBox
的Dock
属性设为Fill
。
这样中间的列将扩展以填充 TableLayoutPanel
中剩余的 space。现在如果你想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));