Как программно применить стили столбцов и строк к TableLayoutPanel?

В начале есть TableLayoutPanel только с одной строкой и без столбцов. Одним нажатием кнопки я хочу, чтобы эта панель была преобразована с 5 строками и 3 столбцами.

private void button_Click(object sender, EventArgs e)
    {
        this.tableLayoutPanel1.ColumnCount = 3;
        this.tableLayoutPanel1.RowCount = 5;
    }

Проблема в том, что это получается у вас в результате!

введите описание изображения здесь

Как видите, поля, созданные из строк и столбцов, не содержат одинаковых областей на панели.

В случае 3 столбцов и 5 строк столбцы должны разделять 100% tablelayoutpanel, то есть 30% на каждый. В случае 5 рядов каждый ряд должен занимать 20%.

Поэтому я добавляю к методу button_Click следующие две строки кода.

this.tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));
this.tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 20F));

Но я получаю тот же результат! Что мне не хватает?


person Mr T    schedule 02.08.2016    source источник
comment
Зачем тебе пустой TableLayoutPanel? Просто добавьте к нему элементы управления (см. этот ответ). Снимок экрана не соответствует вашему коду. Рассмотрите возможность подготовки mcve (в виде пошагового руководства или полного дампа Form1.cs + Form1.designer. cs), то кто-нибудь может попытаться разобраться в вашей проблеме поближе.   -  person Sinatr    schedule 02.08.2016


Ответы (1)


Вероятно, вы добавляете стили в уже определенный TableLayoutPanel без сброса текущих стилей.

tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
tableLayoutPanel1.Dock = DockStyle.Fill;

tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.ColumnStyle.Clear();
tableLayoutPanel1.RowStyle.Clear();

tableLayoutPanel1.RowCount = 5;
for(int x = 0; x < tableLayoutPanel1.RowCount; x++)
    tableLayoutPanel1.RowStyles.Add(new RowStyle() { Height = 20, SizeType = SizeType.Percent });
tableLayoutPanel1.ColumnCount = 3;
for(int x = 0; x < tableLayoutPanel1.ColumnCount; x++)
    tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle() { Width = 33, SizeType = SizeType.Percent });
person Steve    schedule 02.08.2016
comment
Мистер Стив, большое вам спасибо! это просто спасет мой день. - person Rainning; 07.06.2018