在winform应用程序中从Combobox读取值

时间:2012-04-05 15:34:17

标签: c# winforms nullreferenceexception

我正在使用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);
        }
   }

}

5 个答案:

答案 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

它对我有用。