繁体   English   中英

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

[英]C# WinForms, Adding tabs to a tab control, then adding a control to each tab programmatically

我有一个表格应该迭代一个列表,并为列表中的每个项目添加一个选项卡到选项卡控件。 然后,我有一个应该添加到每个选项卡的组框。

选项卡添加正常,但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); 

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

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

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

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

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

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

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

奇迹般有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM