我是c#的新手,但我遇到了谷歌没有为我解答的问题。
在我的代码中,我可以根据用户输入在TabControl中创建TabPages。 (例如,如果我想要5个项目,我的代码将创建5个选项卡,所有选项卡都有自己的控件(ComboBox))。
我的问题是从这些ComboBox中获取数据。我希望能够从每个ComboBox中为我创建的每个“项目”(TabPage)提取所选数据。由于它们是动态创建的,我不能直接引用(例如TabControl.TabPages [n] .comboBox1.SelectedItem.ToString()),因为'comboBox1'只会引用我创建的最后一个TabPage。
感谢阅读。
答案 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/
的示例