动态内容的自动滚动 Windows 表单
Auto Scrolling Windows Form for Dynamic Content
我正在开发 C# .NET 3.5 桌面应用程序。在软件中我有一个Form
,其中包含一个TableLayoutPanel
tp1
。 tp1
的第二行包含一个 GroupBox
。 GroupBox
包含另一个 TableLayoutPanel
tp2
。 tp2
将在运行时动态增长。
Form
-----------------------------
| TableLayoutPanel tp1 |
|____________________________|
| GroupBox |
| ________________________|
| | |
| | TableLayoutPanel tp2 |
| | ______________________|
| | | |
| | | Dynamic content |
| | | here |
| | | |
| | |______________________|
| |________________________|
| |
|____________________________|
-----------------------------
Form
的 AutoScroll 为真。
tp1
的第 2 行的 SizeType 是 AutoSize。
GroupBox
的 AutoSize 为真。
tp2
的 AutoSize 为真。 tp2
通过以下代码动态更新:
tp2.RowCount = tp2.RowCount + 1;
tp2.RowStyles.Add(new RowStyle(SizeType.AutoSize));
GroupBox gb = new GroupBox();
gb.BackColor = Color.Red;
tp2.Controls.Add(gb, 0, tp2.RowCount - 1);
当 tp1
大于 window 大小时,我希望在 Form
中显示滚动条。但是没有出现滚动条。
如果我将 tp1
的 AutoScroll 设置为 true,我可以用同样的方式激活滚动条。但我想要 Form
上的滚动条,而不是 tp1
.
我怎样才能做到这一点?
您需要使用设计器或代码进行此类设置:
var panel1 = new TableLayoutPanel();
panel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
panel1.RowCount = 2;
panel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20));
panel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
panel1.AutoSize = true;
panel1.AutoSizeMode= System.Windows.Forms.AutoSizeMode.GrowAndShrink;
var groupBox1 = new GroupBox() { Text = "GroupBox" };
groupBox1.AutoSize = true;
groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
var panel2 = new TableLayoutPanel() {Top= 24, Left= 5 };
panel2.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
panel2.AutoSize = true;
panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
groupBox1.Controls.Add(panel2);
panel1.Controls.Add(new Label() { Text = "Label" });
panel1.Controls.Add(groupBox1);
this.SuspendLayout();
this.Controls.Add(panel1);
this.AutoScroll = true;
for (int i = 0; i < 10; i++)
{
panel2.RowCount += 1;
panel2.RowStyles.Add(new RowStyle(SizeType.AutoSize));
panel2.Controls.Add(new GroupBox()
{
Text = string.Format("GroupBox{0}", i + 1)
});
}
this.ResumeLayout(true);
这将是结果:
我正在开发 C# .NET 3.5 桌面应用程序。在软件中我有一个Form
,其中包含一个TableLayoutPanel
tp1
。 tp1
的第二行包含一个 GroupBox
。 GroupBox
包含另一个 TableLayoutPanel
tp2
。 tp2
将在运行时动态增长。
Form
-----------------------------
| TableLayoutPanel tp1 |
|____________________________|
| GroupBox |
| ________________________|
| | |
| | TableLayoutPanel tp2 |
| | ______________________|
| | | |
| | | Dynamic content |
| | | here |
| | | |
| | |______________________|
| |________________________|
| |
|____________________________|
-----------------------------
Form
的 AutoScroll 为真。
tp1
的第 2 行的 SizeType 是 AutoSize。
GroupBox
的 AutoSize 为真。
tp2
的 AutoSize 为真。 tp2
通过以下代码动态更新:
tp2.RowCount = tp2.RowCount + 1;
tp2.RowStyles.Add(new RowStyle(SizeType.AutoSize));
GroupBox gb = new GroupBox();
gb.BackColor = Color.Red;
tp2.Controls.Add(gb, 0, tp2.RowCount - 1);
当 tp1
大于 window 大小时,我希望在 Form
中显示滚动条。但是没有出现滚动条。
如果我将 tp1
的 AutoScroll 设置为 true,我可以用同样的方式激活滚动条。但我想要 Form
上的滚动条,而不是 tp1
.
我怎样才能做到这一点?
您需要使用设计器或代码进行此类设置:
var panel1 = new TableLayoutPanel();
panel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
panel1.RowCount = 2;
panel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20));
panel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
panel1.AutoSize = true;
panel1.AutoSizeMode= System.Windows.Forms.AutoSizeMode.GrowAndShrink;
var groupBox1 = new GroupBox() { Text = "GroupBox" };
groupBox1.AutoSize = true;
groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
var panel2 = new TableLayoutPanel() {Top= 24, Left= 5 };
panel2.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
panel2.AutoSize = true;
panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
groupBox1.Controls.Add(panel2);
panel1.Controls.Add(new Label() { Text = "Label" });
panel1.Controls.Add(groupBox1);
this.SuspendLayout();
this.Controls.Add(panel1);
this.AutoScroll = true;
for (int i = 0; i < 10; i++)
{
panel2.RowCount += 1;
panel2.RowStyles.Add(new RowStyle(SizeType.AutoSize));
panel2.Controls.Add(new GroupBox()
{
Text = string.Format("GroupBox{0}", i + 1)
});
}
this.ResumeLayout(true);
这将是结果: