C# 表的列宽不正确

C# 表的列宽不正确,c#,winforms,windows-forms-designer,column-width,C#,Winforms,Windows Forms Designer,Column Width,因为我是新手,所以当我想为表的列宽设置值(使用代码C#)时,我面临一个问题 我想像画一样展出 但当我编写代码时: private void Form1_Load(object sender, EventArgs e) { // TableLayoutPanel tableLayoutPanel = new TableLayoutPanel(); tableLayoutPanel.ColumnCount = 3; tableLayo

因为我是新手,所以当我想为表的列宽设置值(使用代码C#)时,我面临一个问题

我想像画一样展出

但当我编写代码时:

    private void Form1_Load(object sender, EventArgs e)
    {
       // TableLayoutPanel tableLayoutPanel = new TableLayoutPanel();

        tableLayoutPanel.ColumnCount = 3;
        tableLayoutPanel.RowCount = 1;

        tableLayoutPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.OutsetDouble;
        tableLayoutPanel.Dock = DockStyle.Top;
        tableLayoutPanel.Height = 100;

        tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10F));
        tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60F));
        tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));

        #region Create Label1, label2, label3         
        Label label1 = new Label();
        label1.Text = "Width 10%";
        //label1.Dock = DockStyle.Fill;  

        Label label2 = new Label();
        label2.Text = "Width 60%";
        //label1.Dock = DockStyle.Fill;

        Label label3 = new Label();
        label3.Text = "Width 30%";
        //label1.Dock = DockStyle.Fill;
        #endregion 

        tableLayoutPanel.Controls.Add(label1, 0, 0);
        tableLayoutPanel.Controls.Add(label2,1,0);
        tableLayoutPanel.Controls.Add(label3, 2, 0);
    }
列宽不正确,如下所示

我不知道为什么。请告诉我如何修理它。
Thanks for reading

您的收藏中可能已经有了现有的ColumnStyles。设置ColumnCount不会重置该集合。只需在添加新内容之前清除即可:

tableLayoutPanel.ColumnStyles.Clear();
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10F));
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60F));
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));

您的集合中可能已有现有的ColumnStyles。设置ColumnCount不会重置该集合。只需在添加新内容之前清除即可:

tableLayoutPanel.ColumnStyles.Clear();
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10F));
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60F));
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));

我看不到您在哪里将
tableLayoutPanel
添加到
this.Controls()
(您在这里创建一个新控件)。当您这样做时,它将按预期工作:)除非您的表单中已经有另一个TableLayoutPanel,并且您认为您正在设置该面板的属性。我将如何编写?如果这是一个现有的TableLayoutPanel(编辑后的外观),请阅读注释。实际上,必须先删除现有样式。因此,在
tableLayoutPanel.RowCount=1之后
,添加
tableLayoutPanel.ColumnStyles.RemoveAt(0)两次(即使在设计器中只有一列和一行,样式也是两个。我链接的注释中描述了这一点)。谢谢Jimi。但我不明白。那么,你能给我写一个例子吗?你的表单1中已经有一个名为
TableLayoutPanel
的TableLayoutPanel了吗?如果是,它有多少列/行?我看不出您在哪里将
tableLayoutPanel
添加到
this.Controls()
(您在这里创建一个新控件)。当您这样做时,它将按预期工作:)除非您的表单中已经有另一个TableLayoutPanel,并且您认为您正在设置该面板的属性。我将如何编写?如果这是一个现有的TableLayoutPanel(编辑后的外观),请阅读注释。实际上,必须先删除现有样式。因此,在
tableLayoutPanel.RowCount=1之后
,添加
tableLayoutPanel.ColumnStyles.RemoveAt(0)两次(即使在设计器中只有一列和一行,样式也是两个。我链接的注释中描述了这一点)。谢谢Jimi。但我不明白。那么,你能给我写一个例子吗?你的表单1中已经有一个名为
TableLayoutPanel
的TableLayoutPanel了吗?如果是,它有多少列/行?但是,当我不在表单中拖放tableLayoutPanel时。我创建
TableLayoutPanel tblpTable=newtableLayoutPanel()->Form1不显示任何内容。那么为什么呢?@Linh如前所述,当您在designer视图中拖放控件时,它会为您创建行和列。当您以编程方式创建它时,就像在注释中一样,它不会。但是,当我不在表单中拖放tableLayoutPanel时。我创建
TableLayoutPanel tblpTable=newtableLayoutPanel()->Form1不显示任何内容。那么为什么呢?@Linh如前所述,当您在designer视图中拖放控件时,它会为您创建行和列。当您以编程方式创建它时(如在注释中),它不会。