向下拉列表框中添加项目

3

我正在尝试将一些项添加到组合框中,就像在MSDN网站上显示的那样,但它抛出了一个空引用异常。

 comboBox1.Items.Add("test");

我试图进行更改。
ComboBox combobox1 = new ComboBox();
object test = new object();
test= "test";
comboBox1.Items.Add(test);

但它仍然无效。你能告诉我问题出在哪里吗?谢谢。
编辑: 问题已解决: 问题在于我调用了

标签。
InitializeComponent();

在这段代码之后,而不是之前,现在它的运行方式符合我的期望之前的状态 :)

3
不是的,项集合是按需创建的。 - Optillect Team
很可能异常并非来自此代码。请将这些行注释掉,查看是否仍然发生异常。如果是源于此代码,请向我们展示完整的异常信息。 - Robert Levy
1
@keyboardP:不一定。在OP的第一个示例中,ComboBox的名称为comboBox1。我敢打赌它们是两个单独的对象,都是有效的,但是comboBox1为空,这是最初错误的原因。 - Ed S.
@Ed S. True,OP必须澄清。但是,即使comboBox1是一个单独的对象,为什么会抛出NullReferenceException?在分配之前不需要手动创建Items集合。那段代码理论上不应该只是将test对象添加到comboBox1中吗? - keyboardP
好的,当我将它更改为comboBox1时 - 它添加了项目,但它不显示它们,为什么? - Martin Ch
显示剩余3条评论
2个回答

3

替换为

ComboBox combobox1 = new ComboBox();
object test = new object();
test= "test";
combobox1.Items = new ArrayList();
combobox1.Items.Add(test);

combobox1comboBox1 不是同一个东西。


虽然这样做是正确的,但会导致编译时错误而不是 NullReferenceException - keyboardP
@Ed S. True,OP必须澄清。但是,即使comboBox1是一个单独的对象,为什么会抛出NullReferenceException?在分配之前不需要手动创建Items集合。那段代码理论上不应该只是将test对象添加到comboBox1中吗? - keyboardP
@keyboardP: 我认为问题不在于Items集合,而是comboBox1实际上是空值。为什么呢?我不知道,但考虑到OP提供的信息,我认为这是唯一的合乎逻辑的结论。 - Ed S.
@keyboardP:嗯,由于OP没有提供足够的信息,这需要很多猜测。使用调试器将使问题变得明显。 - Ed S.
@Ed S. - 看起来你是对的。OP不再有错误了。他们只需要将其添加到容器中,以便根据你的答案可见。 - keyboardP
显示剩余2条评论

3
在这个例子中:
ComboBox combobox1 = new ComboBox();
object test = new object();
test= "test";
comboBox1.Items.Add(test);

您的ComboBox不是任何容器(例如Form)的子项,因此它不会在您的用户界面中显示。我猜这就是您所说的“不起作用”的意思。如果您在代码中创建控件,则需要将其添加到您的表单或表单的子项中,如下所示(假设为WinForms,并且代码位于您的Form类中...)
Controls.Add( combobox1 );

您还需要设置大小、位置等参数。

ComboBoxItems集合不应为空,因为它在调用时创建,所以我们需要看看combobox1来自哪里。当您处理诸如NullReferenceException之类的简单问题时,应使用调试器查找哪个对象为空。

编辑:正如Manjoor指出的那样,C#是区分大小写的(请注意大写的B),因此combobox1comboBox1不同。因此,根据您提供的证据,comboBox1(大写B)为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接