C#WinForms,向选项卡控件添加选项卡,然后以编程方式向每个选项卡添加控件

时间:2014-09-03 09:11:21

标签: c# winforms tabs

我有一个应该遍历列表的表单,并且对于列表中的每个项目,向选项卡控件添加一个选项卡。然后,我有一个应该添加到每个选项卡的组框。

选项卡添加正常,但Group Box仅添加到最后一个选项卡(调试器也显示每个选项卡的Controls集合为空,除了最后一个选项卡)。

任何见解?

foreach (String company in requiredGasComps)
{
   tabCont.TabPages.Add(company,company);     
}

foreach (TabPage tabpage in tabCont.TabPages)
{
   tabpage.Controls.Add(groupBox);
}


foreach ( TabPage tabpage in tabCont.TabPages)
{
    Control [] a = tabpage.Controls.Find("currentSupplier95",true);

    //Will always find 0 or 1 control
    if (a.Length > 0)
    {
        a[0].Text = tabpage.Text;
    }
}

this.Controls.Add(tabCont); 

4 个答案:

答案 0 :(得分:1)

我认为你在每个Tabpage上都放了相同的groupBox。尝试:

foreach (TabPage tabpage in tabCont.TabPages)
{
   GroupBox groupBox = new GroupBox();
   tabpage.Controls.Add(groupBox);
}

答案 1 :(得分:1)

控件只能属于一个集合,或者 - 换句话说 - 只能有一个父亲。因此,您无法将相同的GroupBox添加到多个选项卡,您必须创建不同的GroupBox实例,然后将它们添加到选项卡。

答案 2 :(得分:1)

我建议您修改代码以创建要添加的标签页,然后您可以同时添加组框

foreach (String company in requiredGasComps)
{
    TabPage t = new TabPage(){Name = company, Text = company};
    Groupbox gb = groupBox.CreateNewBasedFromThis();
    t.Controls.Add(gb);
    tabCont.TabPages.Add(t);     
}

由于您不必重复两次

,因此效率也会更高

您也可以创建一个扩展方法,以根据旧的

创建新的组框
public static GroupBox CreateNewBasedFromThis(this GroupBox gb)
{
    var newGb = new GroupBox;
    //set new properties that you wish to copy
    return newGb;
}

答案 3 :(得分:0)

谢谢大家,我最终创建了一个用户控件,然后

foreach (TabPage tabpage in tabCont.TabPages)
{
    EnergyTable table = new EnergyTable();
    tabpage.Controls.Add(table);
}

像魅力一样。