C# 在TableLayoutPanel中设置默认行高度

C# 在TableLayoutPanel中设置默认行高度,c#,height,cell,tablelayoutpanel,C#,Height,Cell,Tablelayoutpanel,如何将c#中所有TableLayoutPanel行的默认高度设置为16px 通常我会: for (int i = 0; i < amount_of_rows; i++) { panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16)); } 这样的代码创建高度为24px的行 按如下方式填充表后,将列样式添加到表中: for (int i = 0; i < amountOfRows ; i++) { panel.Ro

如何将c#中所有
TableLayoutPanel
行的默认高度设置为16px

通常我会:

for (int i = 0; i < amount_of_rows; i++)
{
    panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16));
}
这样的代码创建高度为24px的行

按如下方式填充表后,将列样式添加到表中:

for (int i = 0; i < amountOfRows ; i++)
{
    panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16));
}
for(int i=0;i
可以工作,但它使最后一行非常大

编辑:示例代码,包括添加控件:

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);
TableLayoutPanel=新建TableLayoutPanel
{
BackColor=SystemColors.Control,
CellBorderStyle=TableLayoutPanelCellBorderStyle.Single,
AutoScroll=true,
宽度=500,
位置=新点(-1,-1),
ColumnCount=8,
边距=新填充(0),
填充=新填充(0)
};
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,16));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,73));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,16));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,73));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,38));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,38));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,52));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Absolute,52));
对于(int i=0;i<10;i++)//假设我们不知道它将被添加10倍
{
复选框exchangeEnabled=新复选框
{
边距=新填充(0),
填充=新填充(0),
Dock=DockStyle.Fill,
CheckAlign=ContentAlignment.MiddleCenter
};
panel.Controls.Add(可交换的,0,i);
}
控件。添加(面板);

我假设您获得高度为24像素的单元格的原因是您正在添加高度为16像素的控件

除非更改这些值,否则默认的
边距
填充
值为所有边的3个像素

这将导致额外的2x3+2x3像素,使单元格的总高度达到24像素

要控制高度,不仅应控制添加控件的高度,还应控制TLP的
填充
和子级的
边距
值的高度

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

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

TableLayoutPanel中子控件的锚定行为不同 来自其他容器控件中的行为。如果 子控件的锚点属性设置为左或右,即 将放置在单元格的左边框或右边框上 距离,即控件的边距属性和 面板的填充属性。如果同时设置了左值和右值, 控件的大小将调整为单元格的宽度,并带有边距 并考虑填充值。顶部和底部的行为 锚定是类似的。有关详细信息,请参见如何:锚定和 在TableLayoutPanel控件中停靠子控件

如果需要子控件来模拟中的默认锚定行为 其他容器控件,可以调整边距和填充 属性以保持控件的 边框和单元格的边框


我假设得到高度为24像素的单元格的原因是添加了高度为16像素的控件

除非更改这些值,否则默认的
边距
填充
值为所有边的3个像素

这将导致额外的2x3+2x3像素,使单元格的总高度达到24像素

要控制高度,不仅应控制添加控件的高度,还应控制TLP的
填充
和子级的
边距
值的高度

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

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

TableLayoutPanel中子控件的锚定行为不同 来自其他容器控件中的行为。如果 子控件的锚点属性设置为左或右,即 将放置在单元格的左边框或右边框上 距离,即控件的边距属性和 面板的填充属性。如果同时设置了左值和右值, 控件的大小将调整为单元格的宽度,并带有边距 并考虑填充值。顶部和底部的行为 锚定是类似的。有关详细信息,请参见如何:锚定和 在TableLayoutPanel控件中停靠子控件

如果需要子控件来模拟中的默认锚定行为 其他容器控件,可以调整边距和填充 属性以保持控件的 边框和单元格的边框


谢谢,但这不会改变任何事情。我在TableLayoutPanel及其控件中添加了Margin=newpadding(0),Padding=newpadding(0)。我添加了一个示例代码,包括添加一个控件。还是我没有完全理解你?嗯,不,你说得对。设置较大的填充/边距时,您能看到影响吗?-最大高度是多少?默认情况下,复选框已启用自动调整大小,因此高度将取决于Fontsize。在所有控件上设置高度=16。即使边距和填充为0,出于某种原因,它仍然会在周围添加一些空间。在指定了确切的高度后,它会工作。谢谢你给我指出了正确的方向。最后,我在开始时运行了另一个循环,计算行的数量,并在添加控件之前添加16px行。我不得不这样做,因为它不可能改变文本框的大小,这是单一的
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);