2015-06-08 142 views
0

我已经将所有控件放在一个面板中。在运行时,我想将控件添加到表格布局面板。要做到这一点,我写了下面的代码。如何从面板动态添加控件到表格布局面板

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++; 
       }      
      }    
    } 

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

任何人都可以告诉我如何动态地将窗体控件添加到表格布局面板。

+0

您正在将控件从面板移动到tblPanel。哪些修改panel.Controls集合。所以panel.Controls [i + 1]不是你认为的那样,它是panel.Controls [i]之后的* second *控件。 –

+0

是的。如果我检查控制面板的名称。控件[i + 1]。名称只适用于我。但它并没有增加。 – Raghuveera

回答

0

它为我工作。

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++; 
      }      
     }    
} 
0

您可以使用此代码来做到这一点。

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

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

以Combobox为例。用你的控件替换它

+0

我不想添加动态生成的标签。标签和文本框控件在我的设计中。基于某些条件它会改变能见度。所以我必须重新排列现有的控件。 – Raghuveera

+0

是我在做tblPanel.Controls.Add(panel.Controls [i],0,rowcount)同样的事情; – Raghuveera

+0

如果我不添加tblPanel.ColumnCount = 2;那么只有一列即将到来。 – Raghuveera