【问题标题】:how to add controls dynamically to table layout panel from panel如何从面板动态添加控件到表格布局面板
【发布时间】:2015-06-10 19:53:45
【问题描述】:

我已将所有控件放在一个面板中。在运行时,我想将控件添加到表格布局面板中。为此,我编写了以下代码。

 void arrangeTableLayout()
    {
        int rowcount = 1;           
            tblPanel.ColumnCount=2;           
            tblPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            tblPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
            for (int i = 0; i < panel.Controls.Count; i++)
            {
                if (panel.Controls[i].Visible)
                {

                  tblPanel.Controls.Add(panel.Controls[i], 0, rowcount);
                  tblPanel.Controls.Add(panel.Controls[i + 1], 1, rowcount);
                  tblPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));                            
                   i++;                           
                   rowcount++;
                 }                    
            }            
    } 

在控件数组中,控件是我需要的。但是上面的代码只在一列中添加了标签。

谁能告诉我如何将窗体控件动态添加到表格布局面板中。

【问题讨论】:

  • 您正在将控件从面板移动到 tblPanel。这会修改 panel.Controls 集合。所以 panel.Controls[i+1] 并不是你想的那样,它是 panel.Controls[i] 之后的第二个控件。
  • 是的。如果我检查该控制面板的名称。Controls[i+1].Name 只为我而来的正确名称。但它没有添加。

标签: c# tablelayoutpanel


【解决方案1】:

它对我有用。

 void arrangeTableLayout()
 {
    int rowcount = 1;           
        tblPanel.ColumnCount=2;           
        tblPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
        tblPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
        for (int i = 0; i < panel.Controls.Count; i++)
        {
            if (panel.Controls[i].Visible)
            {
             var c1 = panel.Controls[i];
             var c2 = GetNextControl(panel.Controls[i], true);
             panel.Controls.Remove(c1);
             i--;                            
             panel.Controls.Remove(c2);
             tblPanel.Controls.Add(c1, 0, rowcount);
             tblPanel.Controls.Add(c2, 1, rowcount);
             tblPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));                                          
             rowcount++;
             }                    
        }            
} 

【讨论】:

    【解决方案2】:

    您可以使用此代码来执行此操作。

       tblPanel.Controls.Add(new Label() { Text = "Type:", Anchor = AnchorStyles.Left, AutoSize = true }, 0, 0);
       tblPanel.Controls.Add(new ComboBox() { Dock = DockStyle.Fill }, 0, 1);
    

    您不需要定义行数和列数,它们会自动添加。

    以组合框为例。用你的控件替换它

    【讨论】:

    • 我不想添加动态生成的标签。标签和文本框控件在我的设计中。根据某些条件,它会改变可见性。所以我只需要重新排列现有的控件。
    • 是的,我在 tblPanel.Controls.Add(panel.Controls[i], 0, rowcount);
    • 如果我不添加 tblPanel.ColumnCount=2;行,那么只有一列即将到来。
    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多