How can I set default height of all TableLayoutPanel
rows in c# to 16px?
Usually I would do:
for (int i = 0; i < amount_of_rows; i++)
{
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16));
}
But in my case I have 8 columns and unknown amount of rows. Amount on rows is known after all controls are added, not before.
This is my code:
TableLayoutPanel panel = new TableLayoutPanel
{
BackColor = SystemColors.Control,
CellBorderStyle = TableLayoutPanelCellBorderStyle.Single,
AutoScroll = true,
Width = 500,
Location = new Point(-1, -1),
ColumnCount = 8
};
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52));
int amountOfRows = 0;
for (...)
{
// a lot of code which populates panel with generated controls and counts amountOfRows
}
panel.RowCount = amountOfRows;
Controls.Add(panel);
Such code creates rows with 24px height.
Adding ColumnStyles to table after it was populated like this:
for (int i = 0; i < amountOfRows ; i++)
{
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16));
}
works but it makes last row very large.
EDIT: example code including adding a control:
TableLayoutPanel panel = new TableLayoutPanel
{
BackColor = SystemColors.Control,
CellBorderStyle = TableLayoutPanelCellBorderStyle.Single,
AutoScroll = true,
Width = 500,
Location = new Point(-1, -1),
ColumnCount = 8,
Margin = new Padding(0),
Padding = new Padding(0)
};
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52));
for (int i = 0; i < 10; i++) // lets assume we don't know it will be added 10x
{
CheckBox exchangeEnabled = new CheckBox
{
Margin = new Padding(0),
Padding = new Padding(0),
Dock = DockStyle.Fill,
CheckAlign = ContentAlignment.MiddleCenter
};
panel.Controls.Add(exchangeEnabled, 0, i);
}
Controls.Add(panel);