Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Как сделать все ячейки в tableLayoutPanel одного размера?

Здравствуйте. Моя цель - сделать все ячейки 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) });

Комментариев нет:

Отправить комментарий