【问题标题】:Expandable column using TableLayoutPanel (from code)使用 TableLayoutPanel 的可扩展列(来自代码)
【发布时间】:2016-08-04 12:52:52
【问题描述】:

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

我还尝试了https://stackoverflow.com/a/7279996/492336 的建议,将列设置为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));

但这也没有效果。

我在这里做错了什么?

【问题讨论】:

  • 查看您的代码并想知道究竟这些控件如何最终出现在正确的列中。您从不指定列号。查看如何正确编程 TLP 的最佳方法是在设计器中使用它并查看设计器生成的 InitializeComponent() 方法。你会发现Add() method overload
  • @HansPassant 谢谢!我在另一个实验代码中检查过 - 它们从左到右然后从上到下,有点像你写的那样,如果没有足够的项目,最后一行仍然部分填充。无论如何,我更改了我的代码以使用另一个重载,但它没有效果。顺便说一句,我来自您在stackoverflow.com/a/3601011/492336 的回答 - 我正在尝试使用 TableLayoutPanel 作为 Qt 布局的替代品,它会在有意义时自动使小部件可扩展。

标签: c# winforms tablelayoutpanel


【解决方案1】:

如果您想将中间列展开并占用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));

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多