2016-08-31 31 views
1

我正在研究C#.NET 3.5桌面应用程序。在软件中,我有一个Form,其中包含TableLayoutPaneltp1tp1的第二行包含GroupBoxGroupBox包含另一个TableLayoutPaneltp2tp2将在运行时动态增长。动态内容的自动滚动Windows窗体

Form 
----------------------------- 
| TableLayoutPanel tp1  | 
|____________________________| 
| GroupBox    | 
| ________________________| 
| |      | 
| | TableLayoutPanel tp2 | 
| | ______________________| 
| | |      | 
| | | Dynamic content | 
| | |  here   | 
| | |      | 
| | |______________________| 
| |________________________| 
|       | 
|____________________________| 
----------------------------- 

Form的AutoScroll为true。

tp1的第2行的SizeType是AutoSize。

GroupBox的AutoSize为true。

自动尺寸为tp2为真。 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); 

我希望有一个滚动条显示在Formtp1比窗口大小。但没有滚动条出现。

我可以以相同的方式激活滚动条,如果我将AutoScroll设置为true tp1。但我想要Form上的滚动条,而不是tp1

我该如何做到这一点?

回答

2

您需要执行使用设计器或代码等设置:

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); 

,这将是这个结果:

enter image description here

+0

我得到了我的问题,这个答案之前解决办法。但感谢您的答案。 – Donotalo

+0

太棒了!不客气,谢谢你的反馈:) –