1

一些在代码前面完成的初始化......

private List<System.Windows.Forms.TabPage> tab_pages = new List<System.Windows.Forms.TabPage>();

int tab_increment = 0;

在代码的某处,我实时创建了一堆标签页。

for (i=0; i<5; i++)
{

    tab_pages.Add(  new System.Windows.Forms.TabPage()  );

    tab_pages[tab_increment].Location = new System.Drawing.Point(4, 22);
    tab_pages[tab_increment].Name = 1 + tab_increment.ToString();
    tab_pages[tab_increment].Size = new System.Drawing.Size(501, 281);
    tab_pages[tab_increment].Text = tab_increment.ToString();

    this.tabControl.Controls.Add(tab_pages[tab_increment]);
    tab_increment += 1;
}

现在我想访问这些标签页的元素。还假设我在每个页面上创建了不同的元素(例如,tabPage[0] 一个按钮,tabPage[1] 一个复选框等),知道所有内容都是动态添加的,我如何访问它们?

4

3 回答 3

2

为了添加页面,我认为使用

tabControl.TabPages.Add(new TabPage("Name"));

或者在你的情况下

this.tabControl.TabPages.Add(tab_pages[tab_increment]);

更合适。

为了访问它们,您可以使用

TabPage tp = tabControl.TabPages[i];  //where i is the index of your TabPage

并且您可以使用TabPage.Controls.AddControls 属性添加任何类似Control的内容TabPage

Button btn = new Button();
btn.Name = "Button name";
tp.Controls.Add(btn);
于 2012-11-19T09:05:38.200 回答
2

检查这种方法:

void Walk(Control control)
{
    foreach (Control c in control.Controls)
    {
        //just walking through controls...
        //...do something

        //but remember, it could contain containers itself (say, groupbox or panel, etc.)...so, do a recursion
        if (c.Controls.Count > 0)
            Walk(c);

    }
    //or
    foreach (Button btn in control.Controls.OfType<Button>())
    {
        //an example of how to walk through controls sub array of certain type
        //this loop won't have a single iteration if this page contains no Buttons

        //..so you can replace Button 
        //and have some certain code for different types of controls
    }
}

并为 tabcontrol 启动它:

foreach (TabPage page in tabControl1.TabPages)
    Walk(page);

我想没有特别需要为一个标签控件单独收集标签页,只要它具有TabPages属性。

在上面的代码中,我使用Enumerable.OfType 方法来获取特定类型控件的子集合。


至于你的代码,试试这个:

for (int i = 0; i < 5; i++)
{
    this.tabControl.Controls.Add(new System.Windows.Forms.TabPage());
    this.tabControl.TabPages[i].Text = i.ToString();
    //...do whatever you need
    //...
    //besdies, I think, ther's no need in tab_increment...loop index works well enough
}
于 2012-11-19T09:08:25.863 回答
0

您可以使用 TabPage 对象上的Controls属性。集合中的每个控件都作为Control提供给您,您可以将它们转换为所需的类型。

于 2012-11-19T08:54:34.973 回答