【问题标题】:c# Retrieving information from a control in a dynamic created tabc#在动态创建的选项卡中从控件中检索信息
【发布时间】:2012-02-29 18:46:42
【问题描述】:

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

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

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

感谢阅读。

【问题讨论】:

  • 如果能看到一些代码就更好了。

标签: c# combobox tabcontrol


【解决方案1】:

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

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

【讨论】:

  • 这应该可以工作 - 但是,现在您需要将标签列表保存在内存中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多