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.Addまた、Controlsプロパティを使用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
    }
}

そして、タブコントロール用に起動します。

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

プロパティができたらすぐに、1つのタブコントロールに個別のタブページのコレクションを用意する必要はないと思い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プロパティを使用できます。コレクション内の各コントロールはコントロールとして提供され、必要なタイプにキャストするのはあなた次第です。

于 2012-11-19T08:54:34.973 に答える