2015-11-23 2 views
1

У меня есть TableLayoutPanel с одной строкой и шестью столбцами. Я добавляю для каждого столбца FlowLayoutPanel. В FlowLayoutPanels я добавляю динамические элементы управления.
Я не могу добавить элементы управления непосредственно в TableLayoutPanel, потому что добавление и удаление слишком медленно для многих строк (удаление элементов управления из строки, а затем перемещение элементов управления из строк ниже одной строки вверх).
Но когда я добавляю элементы управления FlowLayoutPanel, TableLayoutPanel не показывает ScrollBar.C# ScrollBar в TableLayoutPanel с FlowLayouts

Что у меня есть:
TableLayoutPanel: 1 ряд, 6 перевалы, DockStyle: Заполните, AutoScroll: Правда
FlowLayoutPanel: DockStyle: Заполните, FlowDirection: Перевернутые, WrapContents: Ложные

ScrollBar должен отображаться в TableLayoutPanel.

Пример кода (я не думаю, что это помогает, остальное устанавливается в визуальном режиме):

// create controls 
CheckBox control1 = new CheckBox(); 
ComboBox control2 = new ComboBox(); 
ComboBox control3 = new ComboBox(); 
ComboBox control4 = new ComboBox(); 
ComboBox control5 = new ComboBox(); 
CheckBox control6 = new CheckBox(); 

control1.AutoSize = false; 
control1.CheckAlign = System.Drawing.ContentAlignment.MiddleCenter; 

control3.DropDownStyle = ComboBoxStyle.DropDownList; 
control3.Enabled  = false; 

control4.DropDownStyle = ComboBoxStyle.DropDownList; 
control4.Enabled  = false; 

control5.DropDownStyle = ComboBoxStyle.DropDownList; 
control5.Enabled  = false; 

control6.AutoSize = false; 
control6.CheckAlign = System.Drawing.ContentAlignment.MiddleCenter; 
control6.Enabled = false; 

// add to float layout panels 
this.flayControl1.Controls.Add(control1); 
this.flayControl2.Controls.Add(control2); 
this.flayControl3.Controls.Add(control3); 
this.flayControl4.Controls.Add(control4); 
this.flayControl5.Controls.Add(control5); 
this.flayControl6.Controls.Add(control6); 

И изображение, как вы видите, не скроллбар по левую сторону, но элементы управления скрываются в конце (TableLayoutPanel является контроль с границами): enter image description here

+0

Лучше поделиться простым кодом, чтобы воспроизвести проблему. –

+0

обновлено, я не думаю, что это помогает ... – Popiel

+0

Какова роль 'TableLayoutPanel'? Почему бы просто не использовать «панель»? –

ответ

0

Благодаря Реза Aghaei, я решил ее таким образом:

я создал FlowLayoutPanel, а затем, я создал TableLayoutPanel для каждой строки в FlowLayoutPanel.

int pad1, pad2, height = 28; 

FlowLayoutPanel panel = new FlowLayoutPanel(); 
panel.AutoScroll = true; 
panel.FlowDirection = FlowDirection.TopDown; 
panel.WrapContents = false; 

for(int x = 0; x < 10; ++x) 
{ 
    TableLayoutPanel table = new TableLayoutPanel(); 
    table.Width = panel.Width; 

    // controls 
    CheckBox control1 = new CheckBox(); 
    ComboBox control2 = new ComboBox(); 
    ComboBox control3 = new ComboBox(); 
    TextBox control4 = new TextBox(); 
    TextBox control5 = new TextBox(); 
    CheckBox control6 = new CheckBox(); 

    // columns and rows number 
    table.ColumnCount = 6; 
    table.RowCount = 1; 

    // row height 
    table.RowStyles.Add(new RowStyle(SizeType.Absolute, height)); 

    // widths of columns 
    table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 5.0f)); 
    table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 24.0f)); 
    table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20.0f)); 
    table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 22.0f)); 
    table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 24.0f)); 
    table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 5.0f)); 

    // fill 
    control1.Dock = control2.Dock = control3.Dock = control4.Dock = 
    control5.Dock = control6.Dock = DockStyle.Fill; 

    // margin 
    pad1 = (height - control2.Height)/2; 
    pad2 = height - control2.Height - pad1; 

    control2.Margin = control3.Margin = new Padding(2, pad1, 2, pad2); 

    // textboxes margin 
    pad1 = (height - control4.Height)/2; 
    pad2 = height - control4.Height - pad1; 

    control4.Margin = control5.Margin = new Padding(2, pad1, 2, pad2); 

    // add elements to TableLayoutPanel 
    table.Controls.Add(control1, 0, 0); 
    table.Controls.Add(control2, 1, 0); 
    table.Controls.Add(control3, 2, 0); 
    table.Controls.Add(control4, 3, 0); 
    table.Controls.Add(control5, 4, 0); 
    table.Controls.Add(control6, 5, 0); 

    // add table to FlowLayoutPanel 
    panel.Controls.Add(table); 
} 

Этот код создает 10 строк в FlowLayoutPanel.

Смежные вопросы