Здравствуйте. Моя цель - сделать все ячейки tableLayout одинакового размера, причём чтобы они оставались одинаковыми даже при добавлении/удалении столбца или строки. Пробовал сделать AutoSize = true, но это не помогло.
Собственно цель: во время выполнения программы пользователь вводит количество строк и столбцов, у меня создается соответствующий tableLayout, с полностью одинаковыми по размеру ячейками.
Ответ
Дизайнер WinForms автоматически задаёт значения некоторым свойствам TableLayoutPanel, которые только мешают. Поэтому, для упрощения решения, предлагаю создавать его кодом вручную. Например, в конструкторе формы (но можно в событии Form.Load):
TableLayoutPanel tableLayoutPanel;
public Form1()
{
InitializeComponent();
tableLayoutPanel = new TableLayoutPanel
{
Parent = this,
CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset,
AutoSize = true,
AutoSizeMode = AutoSizeMode.GrowAndShrink
};
}
В качестве родителя вместо формы (this) можно задать любой другой контейнер. CellBorderStyle я задал просто для наглядности, чтобы было видно ячейки.
Далее, где-то в коде задаём количество столбцов и строк:
tableLayoutPanel.ColumnCount = 5;
tableLayoutPanel.RowCount = 3;
После чего назначаем столбцам и строкам стили с нужными размерами:
for (int i = 0; i < 5; i++)
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 30));
for (int i = 0; i < 3; i++)
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 30));
SizeType.Absolute означает, что размеры задаются в пикселах.
Соответственно, при увеличении количества ячеек нужно добавлять стили для новых столбцов и строк. А можно изначально задать их с запасом.
Как вариант, вместо задания стилей, можно в каждую ячейку помещать контрол заданного размера, например, панель. Она раздвинет ячейку до своего размера:
for (int i = 0; i < 5 * 3; i++)
tableLayoutPanel.Controls.Add(new Panel { Size = new Size(30, 30) });
Комментариев нет:
Отправить комментарий