繁体   English   中英

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

[英]c# Retrieving information from a control in a dynamic created tab

我是C#的新手,但遇到了一个Google无法为我解答的问题。

在我的代码中,我能够根据用户输入在TabControl中创建TabPage。 (例如,如果我要5个项目,我的代码将创建5个标签,这些标签都带有自己的控件(ComboBoxes))。

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

谢谢阅读。

一种快速简便的解决方案是将组合框放在列表中,如下所示:

    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等)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM