tablelayoutpanel单元格在c#win表单中填充不均匀

tablelayoutpanel单元格在c#win表单中填充不均匀,c#,.net,winforms,tablelayoutpanel,C#,.net,Winforms,Tablelayoutpanel,我有一个tablelayoutpanel。在运行期间,我会动态生成一些标签,每个标签都有一个紫色的圆形图像。现在,有些图像/标签均匀地填充在每个tablelayoutpanel单元格中,但有些没有。请查看图像。。 顶部2行上的标签被均匀填充,而从第3行开始的行已经缩小。为什么会这样?需要采取什么措施来解决此问题?请提前感谢。您应该将和设置为合适的值 例如,对于每一列和每一行,可以使用或定义样式,并为它们设置一个相等的值 在以下示例中: 我将TableLayoutPanel的AutoSize属

我有一个tablelayoutpanel。在运行期间,我会动态生成一些标签,每个标签都有一个紫色的圆形图像。现在,有些图像/标签均匀地填充在每个tablelayoutpanel单元格中,但有些没有。请查看图像。。

顶部2行上的标签被均匀填充,而从第3行开始的行已经缩小。为什么会这样?需要采取什么措施来解决此问题?请提前感谢。

您应该将和设置为合适的值

例如,对于每一列和每一行,可以使用或定义样式,并为它们设置一个相等的值

在以下示例中:

  • 我将
    TableLayoutPanel
    AutoSize
    属性设置为true
  • Form
    AutoScroll
    属性设置为true
  • 使用相等百分比(
    100/columnCount
    )将列样式设置为
    SizeType.Percent
  • 使用相等的变量将行样式设置为
    SizeType.Absolute
    30
  • 动态添加控件
示例代码:

int columnCount = 4;
int rowCount = 13;

this.tableLayoutPanel1.ColumnCount = columnCount;
this.tableLayoutPanel1.RowCount = rowCount;
this.tableLayoutPanel1.ColumnStyles.Clear();
this.tableLayoutPanel1.RowStyles.Clear();
this.tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel1.BackColor = Color.White;
this.tableLayoutPanel1.AutoSize = true;

for (int i = 0; i < columnCount; i++)
{
    this.tableLayoutPanel1.ColumnStyles.Add(
        new ColumnStyle(SizeType.Percent, 100 / columnCount));
}
for (int i = 0; i < rowCount; i++)
{
    this.tableLayoutPanel1.RowStyles.Add(
        new RowStyle(SizeType.Absolute, 30));
}

this.tableLayoutPanel1.SuspendLayout();
for (var i = 1; i <= 50; i++)
{
    var label = new Label();
    label.Text = i.ToString();
    label.Font = new Font(label.Font, FontStyle.Bold);
    label.AutoSize = false;
    label.Size = new Size(30, 30);
    label.Image = Properties.Resources.Circle;
    label.ImageAlign = ContentAlignment.MiddleCenter;
    label.TextAlign = ContentAlignment.MiddleCenter;
    label.Dock = DockStyle.Fill;
    this.tableLayoutPanel1.Controls.Add(label);
}
this.tableLayoutPanel1.ResumeLayout();
int columnCount=4;
int rowCount=13;
this.tableLayoutPanel1.ColumnCount=ColumnCount;
this.tableLayoutPanel1.RowCount=RowCount;
this.tableLayoutPanel1.ColumnStyles.Clear();
this.tableLayoutPanel1.RowStyles.Clear();
this.tableLayoutPanel1.CellBorderStyle=TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel1.BackColor=Color.White;
this.tableLayoutPanel1.AutoSize=true;
对于(int i=0;i对于(var i=1;i tablelayoutpanel dock属性为fill。您应该将
tablelayoutpanel单元格的属性设置为
显示生成新
标签的代码,并将其添加到
tablelayoutpanel
中。您应该将
ColumnStyles
行样式
设置为合适的值。Reza或其他人如何减少tablelayoutpanel的总宽度仍然保持其autosize为true???,并且请记住,上面的tablelayoutpanel位于另一个tablelayoutpanel的单元格内。减少空间的第一件事是使用
label.Margin=新填充(0)
然后,如果您愿意,您可以使用较小的标签宽度。我不想触摸标签的宽度,而是希望减小整个tablelayoutpanel的宽度。这可能吗?面板的自动调整宽度取决于标签的宽度和标签的边距。在您将这些值设置为最小acc之后可接受的值,您的面板宽度处于可接受的最小值。让我们。