2012-02-29 23 views
1

私はC#の新機能ですが、私はGoogleが私に答えなかったという問題に出くわしました。c#動的作成タブ内のコントロールから情報を取得する

私のコードでは、ユーザー入力に基づいてTabControlでTabPageを作成できます。 (例:5個のアイテムが必要な場合、私のコードはすべて独自のコントロール(ComboBoxes)を持つ5個のタブを作成します)。

私の問題は、これらのコンボボックスからデータを取得していることです。私は、作成した各「アイテム」(TabPage)ごとに、選択したデータを各コンボボックスから取得できるようにしたいと考えています。動的に作成されるので、 'comboBox1'は作成した最後のTabPageのみを参照するため、TabControl.TabPages [n] .comboBox1.SelectedItem.ToString()など、直接参照することはできません。

読んでいただきありがとうございます。

+1

いくつかのコードを見ることができれば良いでしょう。 – arunes

答えて

0

迅速かつ簡単な解決策は、このように、リスト内のコンボボックスを置くために、次のようになります。

int tabCount = 5; 
    tabControl.TabPages.Clear(); 

    List<ComboBox> comboboxes = new List<ComboBox>(tabCount); 
    for (int i = 0; i < tabCount; i++) 
    { 
     TabPage tabPage = new TabPage(); 
     ComboBox comboBox = new ComboBox(); 
     comboboxes.Add(comboBox); 
     tabPage.Controls.Add(comboBox); 
     tabControl.TabPages.Add(tabPage); 
    } 

    // You can access the values using the 'comboboxes' list now. 

より良い(より複雑な)ソリューションは、データモデルを実装し、これにコンボボックスをバインドするだろうモデル。この方法では、値を表す具体的なコントロール(TabPage、ComboBoxなど)は気にしません。

+0

これはうまくいくはずですが、タブリストをメモリに保存する必要があります。 – mozillanerd

0

ComboBoxの名前はそれぞれ同じですので、タブコンテナを命名コンテナとして指定し、タブを参照してからFindControlを使用してComboBoxを見つけることをお勧めします。 タブを表すクラスは、INamingContainerを実装する必要があります。これにより、タブ内のすべてのコントロールのコントロールIDの前にネーミングコンテナのIDが付加されます。 名前付けコンテナの例を次に示します。http://www.robertsindall.co.uk/blog/using-inamingcontainer-in-controls/

関連する問題