C# 从winform应用程序中的组合框读取值

C# 从winform应用程序中的组合框读取值,c#,winforms,nullreferenceexception,C#,Winforms,Nullreferenceexception,我正在使用VS2010构建一个Windows窗体应用程序。我想读取用户从下拉菜单组合框中选择的值,并根据该值生成patientNo。但是当我运行应用程序时,我得到一个NullReferenceException 这是我的密码: private void button1_Click(object sender, EventArgs e) { string patientNumber; string gender = comboBox2.SelectedValue.ToString

我正在使用VS2010构建一个Windows窗体应用程序。我想读取用户从下拉菜单
组合框中选择的值
,并根据该值生成
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);
        }
   }

}

除了GeneratePatientNumber之外,我能看到的唯一一个出现NullReferenceException的地方是

comboBox2.SelectedValue.ToString();

如果未选择任何内容
。SelectedValue
将为空,因此不能对其调用
ToString()

您没有说明异常发生在哪一行,因此这有点像是瞎猜。然而:

string gender = comboBox2.SelectedValue.ToString();
comboBox2.SelectedValue
可能为null,在这种情况下,尝试对其调用
ToString()
将导致NullReferenceException。尝试:

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

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

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

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

comboBox2.SelectedItem.ToString()

检索列表中的SelectedItem。

我知道这已经有一年多的历史了,但我正在处理一个类似的项目,但出现了完全相同的错误。为我修好的是使用

comboBox2.SelectedText.ToString();


不要使用组合框1。在案例中选择值

string selected = combobox1.SelectedItem.ToString();

这对我很有效。

我怀疑你问的8个问题都没有正确答案。你需要接受其中的一些。我有一些关于错误可能在哪里的想法,但是当你告诉我们你在哪一行得到异常时会有所帮助,而且如果你以后不接受它,我不会给出答案,就像其他你没有接受答案的问题一样。你如何初始化组合框<代码>组合框2。SelectedValue可以为空。哪一行出现异常?您是否尝试过使用断点检查组合框选定值的值?你从不接受任何答案这一事实在这个网站上对你没有帮助。我会接受when is work Pl在你的例子中,如果它到达ToString行,SelectedValue将始终为null异常在你更正后不再出现,但Messagebox上没有显示任何内容。然后你需要找出SelectedValue始终为null的原因,这是很难从张贴的代码计算出来的。也许其中一个会有帮助。你不必使用数据源来使用SelectedItem。@AshBurlaczenko,但如果你不使用数据源(我怀疑OP是如何操作的),那么你就必须使用SelectedItem。谢谢BradRem,你真的解释了我问题的原因。@ecomma,
.Text
返回字符串,因此不需要使用
.ToString()
string selected = combobox1.SelectedItem.ToString();