WinForms - 清除ComboBox.SelectedIndex导致错误

时间:2017-06-15 08:58:38

标签: c# winforms

我有一个表格,第一个问题是,该人是否想回答这些问题?如果它等于"否"然后隐藏其他输入。当我隐藏输入时,我想删除字段,因此它们是空白的。

当我隐藏我的组合框并使用:calledUs.SelectedIndex = -1;时,它会返回错误

  

对象引用未设置为对象的实例

但它完成了我想要的,只是出错了。

我错过了克服Null参考的东西吗?我一直在阅读以下Stack Overflow问题:

Combobox text when clearing items

What is a NullReferenceException, and how do I fix it?

任何帮助都会很棒。

更新:

代码示例:

 private void wantToAnswer_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (wantToAnswer.SelectedItem.ToString() == "Yes")
            {
                //THIS IS THE PANEL THE COMBOBOX IS WITHIN
                clothingCaughtFire.Visible = true; 
                Refresh();
            }
            else
            {
                calledUs.SelectedIndex = -1;
                //THIS IS THE PANEL THE COMBOBOX IS WITHIN
                clothingCaughtFire.Visible = false;
                Refresh();
            }
        }

4 个答案:

答案 0 :(得分:1)

作为快速修正,我建议在条件中添加?

  ...

  // ?. instead of . :
  // in case wantToAnswer.SelectedItem == null the condition now is null == "Yes"
  if (wantToAnswer.SelectedItem?.ToString() == "Yes")

  ...

由于wantToAnswer.SelectedItem可能是null,在这种情况下,wantToAnswer.SelectedItem.ToString()会抛出NullReferenceException例外

除此之外。我正在对被叫的Combobox进行检查,问题进一步缩小。见下文:

private void wantToAnswer_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (wanttoAnswer.SelectedItem?.ToString() == "Yes")
        {
            clothingCaughtFire.Visible = true;
            Refresh();
        }
        else
        {
            calledUs.SelectedIndex = -1;
            clothingCaughtFire.Visible = false;
            Refresh();
        }
    }

    private void calledUs_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (calledUs.SelectedItem?.ToString() == "Yes - Other")
        {
            otherClothingFire.Visible = true;
            Refresh();

        }
        else
        {
            otherClothingFire.Visible = false;
            otherSpecify.Text = "";
            Refresh();
        }
    }

答案 1 :(得分:1)

您正在收到错误,因为您正在尝试设置对象属性为null。

考虑以下

Dog rex;
rex.Colour = "Brown";

在您实例化他之前,您无法设置雷克斯的颜色。例如,

Dog rex = new Dog();
rex.Colour = "Brown";

尝试这样做calledUs.SelectedIndex = -1是一回事。在calledUs实例化之前,您无法访问其SelectedIndex

您可以通过在访问它之前检查它是否存在来避免这种情况发生。例如,

if (calledUs != null) // Do what you need to do

答案 2 :(得分:0)

该错误表示calledUs对象当时为空。在设置所选索引之前,请确保已实例化对象。

答案 3 :(得分:0)

将你的代码放在InitializeComponent()之后, 或者在Form_Load()中,您的控件需要初始化才能访问