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