我有一个表格,第一个问题是,该人是否想回答这些问题?如果它等于"否"然后隐藏其他输入。当我隐藏输入时,我想删除字段,因此它们是空白的。
当我隐藏我的组合框并使用: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();
}
}
答案 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()中,您的控件需要初始化才能访问