如何将c#中所有TableLayoutPanel
行的默认高度设置为16px?
通常我会这样做:
for (int i = 0; i < amount_of_rows; i++)
{
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16));
}
但在我的情况下,我有8列和未知数量的行。添加所有控件后,行数量已知,而不是之前。
这是我的代码:
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);
此类代码创建高度为24px的行。
将ColumnStyles填充到表后,如下所示:
for (int i = 0; i < amountOfRows ; i++)
{
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16));
}
有效,但最后一行非常大。
编辑:示例代码,包括添加控件:
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);
答案 0 :(得分:0)
我认为您获得高度为24像素的单元格的原因是您要添加高度为16像素的控件。
除非您更改值,否则所有边的默认Margin
和Padding
值均为3像素。
这将产生2x3 + 2x3额外像素,最多可为细胞增加24像素。
要控制高度,您不仅要控制添加的控件的高度,还要控制TLP的Padding
和孩子的Margin
值。
这也是一种放大行或列的方法,也是我知道以像素完美方式对齐/放置控件的唯一方法..
子控件的停靠行为与其他容器控件相同。
TableLayoutPanel中子控件的锚定行为有所不同 从其他容器控件中的行为。如果是的价值 子控件的Anchor属性设置为Left或Right,即控件 将放置在单元格的左边界或右边界处 距离是对照的保证金属性和 面板的填充属性。如果同时设置了Left和Right值, 使用边距将控件的大小调整为单元格的宽度 和Padding值被考虑在内。顶部和底部的行为 锚定是类似的。有关更多信息,请参见如何:锚定和 在TableLayoutPanel控件中停靠子控件。
如果你需要一个子控件来模仿默认的锚定行为 其他容器控件,您可以调整边距和填充 在控件之间保持恒定距离的属性 边界和小区的边界。