添加多个级别的动态创建的选项卡

时间:2018-08-16 20:40:03

标签: c# visual-studio winforms

我正在开发一个WinForms应用程序,其中有一个带有选项卡的静态TabControl,需要在其中添加多个级别的其他选项卡。这些选项卡的数量将根据加载到表单的数据而改变。

我可以将动态标签的第一行添加到静态标签中,例如:

TabControl tabControlWafers = new TabControl();
tabControlWafers.Dock = DockStyle.Fill;
int numwafers = wafers.Count();
for (int m = 0; m < numwafers; m++)
{
    TabPage tabPage = new TabPage()
    {
        Name = wafers[m]
    };

    tabPage.Text = wafers[m].ToString();
    tabControlWafers.TabPages.Add(tabPage);
}

tabPage1.Controls.Add(tabControlWafers);

我的问题是,现在我需要向上面创建的每个页面添加另一级别的动态创建的选项卡。在像以前一样创建下一个标签后:

TabControl tabControlStructure = new TabControl();
tabControlStructure.Dock = DockStyle.Fill;
int numstruct = structures.Count();
for (int n = 0; n < numstruct; n++)
{
    TabPage tabPagestruct = new TabPage()
    {
        Name = structures[n]
    };

    tabPagestruct.Text = structures[n].ToString();
    tabControlStructure.Controls.Add(tabPagestruct);
}

如何将在此处创建的标签放在前三个标签中的每个标签上?

1 个答案:

答案 0 :(得分:1)

通过遍历TabPageCollection中的tabControlWafers.TabPages,然后在每次迭代中创建并添加tabControlStructure对象之一,您应该能够完成所需的工作。请参阅以下示例,了解如何完成此操作。请注意,该示例假定已经创建了tabControlWafers

foreach (TabPage tp in tabControlWafers.TabPages)
{
    TabControl tabControlStructure = new TabControl()
    {
        Dock = DockStyle.Fill
    };
    int numstruct = structures.Count();
    for (int i = 0; i < numstruct; i++)
    {
        TabPage tabPagestruct = new TabPage()
        {
            Name = structures[i],
            Text = structures[i]
        };
        tabControlStructure.TabPages.Add(tabPagestruct);
    }
    tp.Controls.Add(tabControlStructure);
}

修改:

下面是该方法的一般示例,通过该方法可以生成网络嵌套的TabPage结构。请注意,如果这是真实的生产代码,我会将子页面的添加拉入其自己的方法中(类似于addSubPages(TapPage parent, String[] names)。这只是一个简单的粘贴并运行示例,可以更好地了解我所描述的内容。

public Form1()
{
    InitializeComponent();

    TabControl tc1 = new TabControl()
    {
        Dock = DockStyle.Fill
    };

    for (int i = 0; i < 5; i++)
    {
        tc1.TabPages.Add(i.ToString());
    }

    foreach (TabPage tp in tc1.TabPages)
    {
        TabControl tc2 = new TabControl
        {
            Dock = DockStyle.Fill
        };

        for (int i = 0; i < 5; i++)
        {
            tc2.TabPages.Add(tp.Text + "." + i.ToString());
        }

        tp.Controls.Add(tc2);

        foreach (TabPage tp2 in tc2.TabPages)
        {
            TabControl tc3 = new TabControl
            {
               Dock = DockStyle.Fill
            };

            for (int i = 0; i < 5; i++)
            {
                tc3.TabPages.Add(tp2.Text + "." + i.ToString());
            }
            tp2.Controls.Add(tc3);
        }
    }
    this.Controls.Add(tc1);
}

上面的示例表示其他形式的空白构造函数,如下所示:

Ugly, but gets the point across