我正在使用简单的C#表单。我总共有20个ComboBoxes。 10个ComboBox包含类似的数据类型,名称非常相似(CB1,CB2,CB3,... CB10)。每个ComboBox都加载了5个元素A,B,C,D,E的列表(这意味着我将这些值添加到10个“CB”组合框中的每一个)。我的意图是用户可以从1个组合框或2个组合框中选择项目(A,B,C,D,E中的一个)。 。 。 。或者全部(10个组合框)。
我希望存储来自ComboBoxes的数据,其中列表或数组中选择了一个项目。为此,我想迭代10个ComboBoxes(名称为CB1,CB2,CB3,...,CB10的组合框),检查是否在组合框中选择了一个项目,并将选择的值存储在ComboBox中列表(在列表下面的代码中称为符号)。最后,我的符号列表的长度(项目数)将取决于用户选择的ComboBox的数量。这是我正在使用的代码:
List<string> symbols = new List<string>();
for (int i = 1; i <= 10; i++)
{
var my_comboBox = this.Controls["CB" + i.ToString()];
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
当我运行代码时,我收到以下错误。
对象引用未设置为对象的实例。
有人可以解释一下我做错了吗?我从另一个已发布和回答的问题中得到了代码,下面是该问题的链接。提前谢谢。
How can I iterate all ComboBoxes controls with a loop in C#?
我还尝试了对所引用问题的答案提出的其他备选方案。 但它没有用。它没有经过foreach循环(尽管没有显示错误)。这是选项2的代码。
List<string> symbols = new List<string>();
var comboBoxes = this.Controls.OfType<ComboBox>().Where(x => x.Name.StartsWith("CB"));
foreach (var cmbBox in comboBoxes)
{
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
再次,如果有人可以请我提出我做错的想法,那将是非常好的。再次提前感谢。
ComboBoxes属于如下图所示的表单。在那里,ComboBox被称为component_CB1,component_CB2,component_CB3,...,component_CB10(我将问题中的ComboBoxes的名称更改为CB,以便更容易理解)。
答案 0 :(得分:2)
感谢所有为此问题找到答案的人。请阅读评论以确定贡献者。
答案是您可以在C#中迭代选定的ComboBox。但是要使其工作,您需要确保知道您的ComboBox添加了什么容器控件。
要了解容器控件,您的ComboBox会被添加到转到View→Other Windows→Document Outline 。您可以查看这些控件是否是表单的直接子项,或者它们是另一个容器控件的子项。
如果将ComboBox直接添加到表单中,那么有两种方法可以遍历ComboBox:
替代方案1 :(组合框直接添加到表单中)
List<string> symbols = new List<string>();
for (int i = 1; i <= 10; i++)
{ //CB is the begining of the name of the comboboxes CB1, CB2, ... CB10
var my_comboBox = this.Controls["CB" + i.ToString()];
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
替代方案2 :(组合框直接添加到表单中)
List<string> symbols = new List<string>();
//CB is the begining of the name of the comboboxes CB1, CB2, ... CB10
var comboBoxes = this.Controls.OfType<ComboBox>().Where(x=>x.Name.StartsWith("CB"));
foreach (var cmbBox in comboBoxes)
{
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
如果将ComboBox添加到另一个控件容器(例如,在我最初的情况下,TabControl中的选项卡),您必须指定控件容器名称而不是“this”。以下是两个备选方案,例如ComboBoxes Cb1,CB2,CB3,...,CB10,它们被添加到名为tab1的选项卡中。
替代方案1 :(组合框添加到TabControl的选项卡中)
List<string> symbols = new List<string>();
for (int i = 1; i <= 10; i++)
{//CB is the begining of the name of the comboboxes CB1, CB2, ... CB10
var my_comboBox = tab1.Controls["CB" + i.ToString()];
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
替代方案2 :(将ComboBox添加到TabControl的选项卡中)
List<string> symbols = new List<string>();
//CB is the begining of the name of the comboboxes CB1, CB2, ... CB10
var comboBoxes = tab1.Controls.OfType<ComboBox>().Where(x
=>x.Name.StartsWith("CB"));
foreach (var cmbBox in comboBoxes)
{
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
再次感谢您的帮助。我希望这对其他人有用。