2015-12-27 1 views
1

У меня есть tablelayoutpanel. И во время выполнения я генерирую некоторые ярлыки динамически, каждый из которых имеет фиолетовое круглое изображение. Теперь некоторые изображения/метки равномерно заполняются внутри каждой ячейки tablelayoutpanel, но некоторые нет. Пожалуйста, см. изображение. enter image description heretablelayoutpanel cell не равномерно заполняется в C# win form

Этикетки на верхних 2-х рядах равномерно заполнены, а строки, начиная с третьей, сокращены. Почему это происходит? Что нужно сделать, чтобы избавиться от этой проблемы? Спасибо заранее.

+0

TableLayoutPanel док свойство заполнения. –

+0

Вы должны установить свойства 'tablelayoutpanel cell' – J3soon

+0

Показать код, который генерирует новую' Label' и добавлять их в 'TableLayoutPanel' – Fabio

ответ

3

Вы должны установить ColumnStyles и RowStyles подходящим значениям.

Например, для каждого столбца и строки вы можете определить стиль с помощью SizeType.Percent или SizeType.Absolute и установить для них равное значение.

В приведенном ниже примере:

  • Я установил AutoSize собственности TableLayoutPanel к истинным
  • Установить AutoScroll свойства Form истинных
  • стилей Наборов столбцов для SizeType.Percent с помощью равного процента (100/columnCount)
  • Установите стили строк на SizeType.Absolute с использованием равных валов 30
  • Добавить элементы управления динамически.

Пример кода:

int columnCount = 4; 
int rowCount = 13; 

this.tableLayoutPanel1.ColumnCount = columnCount; 
this.tableLayoutPanel1.RowCount = rowCount; 
this.tableLayoutPanel1.ColumnStyles.Clear(); 
this.tableLayoutPanel1.RowStyles.Clear(); 
this.tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; 
this.tableLayoutPanel1.BackColor = Color.White; 
this.tableLayoutPanel1.AutoSize = true; 

for (int i = 0; i < columnCount; i++) 
{ 
    this.tableLayoutPanel1.ColumnStyles.Add(
     new ColumnStyle(SizeType.Percent, 100/columnCount)); 
} 
for (int i = 0; i < rowCount; i++) 
{ 
    this.tableLayoutPanel1.RowStyles.Add(
     new RowStyle(SizeType.Absolute, 30)); 
} 

this.tableLayoutPanel1.SuspendLayout(); 
for (var i = 1; i <= 50; i++) 
{ 
    var label = new Label(); 
    label.Text = i.ToString(); 
    label.Font = new Font(label.Font, FontStyle.Bold); 
    label.AutoSize = false; 
    label.Size = new Size(30, 30); 
    label.Image = Properties.Resources.Circle; 
    label.ImageAlign = ContentAlignment.MiddleCenter; 
    label.TextAlign = ContentAlignment.MiddleCenter; 
    label.Dock = DockStyle.Fill; 
    this.tableLayoutPanel1.Controls.Add(label); 
} 
this.tableLayoutPanel1.ResumeLayout(); 

Скриншот:

enter image description here

+0

Reza еще раз спасибо –

+0

Добро пожаловать :) –

+0

Reza или кто-нибудь еще там, как уменьшить общую ширину панели tablelayoutpan, сохраняя при этом свою авторазмерность до истины ??? И также, пожалуйста, помните, что вышеупомянутая панель tablelayout находится внутри ячейки другой tablelayoutpanel. –