2012-02-29 34 views
1

我是c#的新手,但遇到了一個Google沒有回答的問題。c#在動態創建的選項卡中檢索控件中的信息

在我的代碼中,我能夠根據用戶輸入在TabControl中創建TabPages。 (例如,如果我想要5個項目,我的代碼將創建5個選項卡,並帶有自己的控件(組合框))。

我的問題是從這些ComboBoxes獲取數據。我希望能夠從每個組合框中爲我創建的每個「項目」(TabPage)提取選定的數據。由於它們是動態創建的,我不能直接引用(例如TabControl.TabPages [n] .comboBox1.SelectedItem.ToString()),因爲'comboBox1'只會引用我創建的最後一個TabPage。

感謝您的閱讀。

+1

如果我們能看到一些代碼會更好。 – arunes 2012-02-29 18:53:56

回答

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 2012-02-29 19:10:19

0

由於您已在每個選項卡中命名組合框,所以我建議您將選項卡容器指定爲命名容器,引用該選項卡,然後使用FindControl查找組合框。 代表該選項卡的類必須實現INamingContainer。這將導致選項卡中的所有控件的控件ID都以命名容器的ID作爲前綴。 這裏是一個命名容器的例子http://www.robertsindall.co.uk/blog/using-inamingcontainer-in-controls/

相關問題