3

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

}

4

5 回答 5

8

你还没有说异常发生在哪一行,所以它有点在黑暗中拍摄。然而:

string gender = comboBox2.SelectedValue.ToString();

comboBox2.SelectedValue可能为 null,在这种情况下尝试调用ToString()它会导致 NullReferenceException。尝试:

if (comboBox2.SelectedValue == null)
{
    return;
}
string gender = comboBox2.SelectedValue.ToString();
//[etc…]

如果这不是您的问题,则异常可能在该方法的其他调用中,例如GeneratePatientNumber.

于 2012-04-05T15:43:58.517 回答
3

如果您在代码中的某处将comboBox2.DataSource属性设置为某个数据源,.SelectedValue则将检索一个值。如果您没有设置该.DataSource属性,SelectedValue则将返回 null。

我假设由于您不断获得空值,因此您没有设置数据源,而是在 VS 设计器中设置您的项目。如果是这种情况,您应该改用:

comboBox2.SelectedItem.ToString()

检索列表中的 SelectedItem。

于 2012-04-05T18:02:26.977 回答
0

除了 GeneratePatientNumber 之外,我唯一能看到你会得到 NullReferenceException 的地方是

comboBox2.SelectedValue.ToString();

如果未选择任何内容,则为.SelectedValuenull,因此不能ToString()调用它。

于 2012-04-05T15:42:35.500 回答
0

我知道这已经有一年多了,但我正在做一个类似的项目,但错误完全相同。为我解决的问题是使用

comboBox2.SelectedText.ToString();

或者

comboBox2.SelectedItem.ToString();
于 2013-11-20T18:31:38.433 回答
0

请勿在使用combobox1.SelectedValuecase使用:

string selected = combobox1.SelectedItem.ToString();

它对我有用。

于 2015-04-14T04:14:55.377 回答