C# 在TableLayoutPanel中设置默认行高度
如何将c#中所有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
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);