c#从动态创建的选项卡中的控件中检索信息

时间:2012-02-29 18:46:42

标签: c# combobox tabcontrol

我是c#的新手,但我遇到了谷歌没有为我解答的问题。

在我的代码中,我可以根据用户输入在TabControl中创建TabPages。 (例如,如果我想要5个项目,我的代码将创建5个选项卡,所有选项卡都有自己的控件(ComboBox))。

我的问题是从这些ComboBox中获取数据。我希望能够从每个ComboBox中为我创建的每个“项目”(TabPage)提取所选数据。由于它们是动态创建的,我不能直接引用(例如TabControl.TabPages [n] .comboBox1.SelectedItem.ToString()),因为'comboBox1'只会引用我创建的最后一个TabPage。

感谢阅读。

2 个答案:

答案 0 :(得分: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等)。

答案 1 :(得分:0)

由于您已在每个选项卡中命名ComboBox,我建议您将选项卡容器指定为命名容器,引用该选项卡,然后使用FindControl查找ComboBox。 表示选项卡的类必须实现INamingContainer。这会导致选项卡中的所有控件的控件ID都以命名容器的id为前缀。 以下是命名容器http://www.robertsindall.co.uk/blog/using-inamingcontainer-in-controls/

的示例