C#程序崩溃,因为列表框项目发生了变化

时间:2018-12-13 15:18:29

标签: c#

我正在为我的研究开发应用程序。现在,我刚刚启动了一个应用程序,在该应用程序中,我获得了足球联赛和俱乐部等数据库。我的应用程序具有以下功能

  • 带有联盟的组合框。
  • 根据您在联赛中的选择显示俱乐部的列表框。
  • 根据您从俱乐部中的选择显示球员的列表框。 现在我得到这个错误
      

    System.NullReferenceException:对象引用未设置为对象的实例

现在我知道为什么会出现此错误,因为如果我选择播放器,它将在标签上提供有关播放器的一些信息。但是,如果在组合框中选择其他联赛或在列表框中选择其他俱乐部,则在球员列表框中更改的选择将触发事件,并尝试更新标签,但没有选择球员,因此它将显示此错误。

现在要解决此错误,我不知道该怎么办,因此如果我已经选择了一名球员并尝试更改俱乐部或联赛,它将不会触发该事件。

标签的更新方式:

private void Listboxspelers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    //set player statistics
    lblpositie.Content = "Positie: " + db.GetPositie(listboxspelers.SelectedItem.ToString());
    lbldoelpunten.Content = "Aantal Doelpunten: " + db.GetDoelpunten(listboxspelers.SelectedItem.ToString());
    lblgelekaarten.Content = "Aantal GeleKaarten: " + db.GetGeleKaarten(listboxspelers.SelectedItem.ToString());
    lblRodeKaarten.Content = "Aantal RodeKaarten: " + db.GetRodeKaarten(listboxspelers.SelectedItem.ToString());
}

2 个答案:

答案 0 :(得分:3)

在致电listboxspelers.SelectedItem之前,请检查null是否不是ToString()。您还应该一次调用ToString()方法,因为您将相同的值传递给了所有方法:

private void Listboxspelers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    //set player statistics
    if (listboxspelers != null && listboxspelers.SelectedItem != null)
    {
        string selectedItem = listboxspelers.SelectedItem.ToString();
        lblpositie.Content = "Positie: " + db.GetPositie(selectedItem);
        lbldoelpunten.Content = "Aantal Doelpunten: " + db.GetDoelpunten(selectedItem);
        lblgelekaarten.Content = "Aantal GeleKaarten: " + db.GetGeleKaarten(selectedItem);
        lblRodeKaarten.Content = "Aantal RodeKaarten: " + db.GetRodeKaarten(selectedItem);
    }
}

答案 1 :(得分:0)

尝试一下:

private void Listboxspelers_SelectionChanged(object sender, SelectionChangedEventArgs e){
    if(listboxspelers.SelectedItem != null){
        lblpositie.Content = "Positie: " + db.GetPositie(listboxspelers.SelectedItem.ToString());
        lbldoelpunten.Content = "Aantal Doelpunten: " + db.GetDoelpunten(listboxspelers.SelectedItem.ToString());
        lblgelekaarten.Content = "Aantal GeleKaarten: " + db.GetGeleKaarten(listboxspelers.SelectedItem.ToString());
        lblRodeKaarten.Content = "Aantal RodeKaarten: " + db.GetRodeKaarten(listboxspelers.SelectedItem.ToString());
    }
}