我正在一个简单的C#表单中工作。我共有20个组合框。 10个组合框将包含类似的数据类型,并且将具有非常相似的名称(CB1,CB2,CB3,... CB10)。每个ComboBox加载了5个元素A,B,C,D,E的列表(我的意思是我将这些值添加到10个“CB”ComboBoxes中的每一个)。我的目的是用户可以从1个组合框或2个组合框中选择项目(A,B,C,D,E中的一个)。 。 。或全部(10个组合框)。如何使用C#中的循环遍历选定的ComboBoxes控件?
我希望从列表或数组中选择项目的组合框中存储数据。为此,我想遍历10个组合框(名称为CB1,CB2,CB3,...,CB10的组合框),检查组合框中是否选择了某个项目,并将组合框中选定的值存储到组合框中一个列表(在列表下面的代码中称为符号)。最后,我的符号列表长度(项目数量)将取决于用户从中选择多少个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属于如下图所示的窗体。在那里ComboBoxes被称为component_CB1,component_CB2,component_CB3,...,component_CB10(我将问题中的ComboBoxes的名称更改为CB,以便更容易理解)。
screenshot of my solution explorer
组合框直接添加到窗体中,或者它们位于某些其他容器(如组框或面板)内部?只有将代码直接添加到表单中,您的代码才能正常工作。 –
亲爱的@ChetanRanpariya感谢您的帮助。我不确定是否将组合框直接添加到我的表单“Form1”中。我上传了解决方案资源管理器的图片,组合框在那里。我相信他们是直接添加的,但你能纠正。 –
从解决方案资源管理器我找不出如果组合框直接添加到窗体或添加到某个容器。但我认为你正在尝试使用无效的id从控件数组中获取组合框。组合框名称以'component'开始,但您尝试使用“CB”进行搜索。你应该做'this.Controls [“component_CB”+ i.ToString();''。你的循环也应该以'i = 1'开头,因为没有名为'component_CB0'的组合框。 –