2012-02-29 53 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/

相关问题