我正在使用VS2010构建Windows窗体应用程序。我想从下拉列表ComboBox
中读取用户选择的值,并根据该值生成patientNo
。但是当我运行应用程序时,我得到一个NullReferenceException
。
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
string patientNumber;
string gender = comboBox2.SelectedValue.ToString();
if (gender != null)
{
if (gender == "Female")
{
var generator = new PatientNumberGenerator();
patientNumber = generator.GeneratePatientNumber(Gender.Female);
const string message = "patientNumber";
const string caption = "Testing PatientNumber class";
var result = MessageBox.Show(message, caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
}
else if (gender == "Male")
{
var generator = new PatientNumberGenerator();
patientNumber = generator.GeneratePatientNumber(Gender.Male);
const string message = "patientNumber";
const string caption = "Testing PatientNumber class";
var result = MessageBox.Show(message, caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
}
}
}
答案 0 :(得分:5)
你还没有说出异常发生在哪一行,所以在黑暗中它是一个镜头。但是:
string gender = comboBox2.SelectedValue.ToString();
comboBox2.SelectedValue
可能为null,在这种情况下,尝试在其上调用ToString()
会导致NullReferenceException。尝试:
if (comboBox2.SelectedValue == null)
{
return;
}
string gender = comboBox2.SelectedValue.ToString();
//[etc…]
如果这不是您的问题,则该异常可能在该方法的其他调用中,例如GeneratePatientNumber
。
答案 1 :(得分:2)
如果您的代码中某处将comboBox2.DataSource
属性设置为某个数据源,则.SelectedValue
将检索一个值。如果您不设置.DataSource
属性,则SelectedValue
将返回null。
我认为,由于您不断获取空值,因此您不是设置数据源,而是在VS Designer中设置项目。如果是这种情况,您应该使用:
comboBox2.SelectedItem.ToString()
检索列表中的SelectedItem。
答案 2 :(得分:0)
我能看到你唯一能得到除GeneratePatientNumber之外的NullReferenceException的地方是
comboBox2.SelectedValue.ToString();
如果未选择任何内容,则.SelectedValue
将为空,因此无法调用ToString()
。
答案 3 :(得分:0)
我知道这已经有一年多了,但是我正在研究一个类似的项目,并且完全一样。为我修复的是使用
comboBox2.SelectedText.ToString();
或
comboBox2.SelectedItem.ToString();
答案 4 :(得分:0)
请勿在{{1}}中使用combobox1.SelectedValue
:
case
它对我有用。