空参考例外

时间:2010-01-15 12:57:18

标签: c#

在c sharp 双赢的形式

我在表单中添加了一个组合框控件 并相应地将项目添加到组合框中 m尝试select-index上的项目被分配给一个字符串,该字符串作为参数传递给以下列方式声明的函数:

private void cmbPayment_SelectedIndexChanged(object sender, EventArgs e)
    {
        string pm = cmbLocation.SelectedItem.ToString();
        payment(pm);
    }

功能:

public void payment(string pym)
    {
        jd.PaymentMode = pym;

    }

alt text http://img42.imageshack.us/img42/8691/adssd.png

5 个答案:

答案 0 :(得分:7)

在我看来,“cmbLocation”应该是“cmbPayment”?

答案 1 :(得分:2)

看起来cmbLocation上没有选择任何项目。如果没有选择任何项,则SelectedItem属性将为null,并且您无法在null上调用toString。

你的意思是cmbLocation还是cmbPayment?因为这发生在cmbPayment事件中。

一种解决方法是检查是否为空:

private void cmbPayment_SelectedIndexChanged(object sender, EventArgs e)
{
    if(!cmbPayment.SelectedItem == null)
    {
        string pm = cmbLocation.SelectedItem.ToString();
        payment(pm);
    }
}

无论如何,这是一种很好的做法,可以防止NullPointerExceptions。

答案 2 :(得分:1)

未选择任何内容时会发生这种情况。

然而,正如其他人所建议的,看起来你指的是错误的组合框,所以即使cmdPayment可能有一个选定的项目,你也不是指它。你写过cmbLocation

答案 3 :(得分:0)

您正在cmbLocation的SelectedItem属性上调用方法(ToString())。如果SelectedItem为null / Nothing(或cmbLocation为null / Nothing),那么您将获得NullReferenceException

答案 4 :(得分:0)

正如其他人所说,看起来你正在查看错误控件上的SelectedItem

值得思考一下如何解决这个问题: 在调试时,您应该能够看到什么是null,大概是SelectedItem? 值得注意的是,您可以查看sender对象,它是引发事件的控件。 在调试器中,您可以查看并比较选择,看到cmbLocationsender相比可能已经慢慢实现。