2016-08-31 9 views
1

Я работаю над настольным приложением C# .NET 3.5. В программном обеспечении у меня есть Form, который содержит TableLayoutPaneltp1. Вторая строка tp1 содержит GroupBox. В GroupBox содержится еще TableLayoutPaneltp2. tp2 будет динамически расти во время работы.Автоматическая прокрутка формы Windows для динамического содержимого

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

AutoScroll из Form верно.

РазмерType строки 2 из tp1 - это AutoSize.

Автоответчик GroupBox является верным.

Автоответчик 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); 

Я хочу скроллбары появляться в Form когда tp1 больше, чем размер окна. Но полосы прокрутки не появляются.

Я могу активировать полосы прокрутки таким же образом, если я установил 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

Отлично! Добро пожаловать и спасибо за отзывы :) –