在TableLayoutPanel中设置行的默认高度

时间:2016-10-21 19:24:25

标签: c# height cell tablelayoutpanel

如何将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);

1 个答案:

答案 0 :(得分:0)

我认为您获得高度为24像素的单元格的原因是您要添加高度为16像素的控件。

除非您更改值,否则所有边的默认MarginPadding值均为3像素。

这将产生2x3 + 2x3额外像素,最多可为细胞增加24像素。

要控制高度,您不仅要控制添加的控件的高度,还要控制TLP的Padding和孩子的Margin值。

这也是一种放大行或列的方法,也是我知道以像素完美方式对齐/放置控件的唯一方法..

  

MSDN:

     

子控件的停靠行为与其他容器控件相同。

     

TableLayoutPanel中子控件的锚定行为有所不同   从其他容器控件中的行为。如果是的价值   子控件的Anchor属性设置为Left或Right,即控件   将放置在单元格的左边界或右边界处   距离是对照的保证金属性和   面板的填充属性。如果同时设置了Left和Right值,   使用边距将控件的大小调整为单元格的宽度   和Padding值被考虑在内。顶部和底部的行为   锚定是类似的。有关更多信息,请参见如何:锚定和   在TableLayoutPanel控件中停靠子控件。

     

如果你需要一个子控件来模仿默认的锚定行为   其他容器控件,您可以调整边距和填充   在控件之间保持恒定距离的属性   边界和小区的边界。