NullReferenceException未处理,Object Reference未设置为对象的实例

时间:2009-05-14 22:00:25

标签: c# exception reference null instance

每当我运行程序时,我得到:NullReferenceException未处理,Object Reference未设置为对象的实例。

当我启动程序时,我会看到一个名为MaxScore的表单,用户输入最高分并按OK。在OK事件中,我调用MainForm中的方法来更新MainForm上的maxGameCountLabel,并将最大分数输入的值作为参数。

当我按下ok时,我在

处得到NullReferenceException
myGameCountLbl.Text = maxGames.ToString();
我的maxGameCountLblUpdate方法。

以下是位于MainForm中的maxGameCountLblUpdate方法代码:

//Update game count label 
public void maxGameCountLblUpdate(decimal maxGames)
{
    maxGames = decimal.ToInt32(maxGames);
    myGameCountLbl.Text = maxGames.ToString();
    compGameCountLbl.Text = maxGames.ToString();
}

这是我在MaxScore上的OK Button事件:

private void okBtn_Click(object sender, EventArgs e)
{
    MainForm.maxGameCountLblUpdate(max);
}

注意,我已经设置了

public Form1 MainForm { get; set; }
MaxScore中的

我在MainForm中创建了MaxScore:

    using (MaxScore scoreForm = new MaxScore())
    {
        scoreForm.MainForm = this;
        scoreForm.ShowDialog();
    }

我无法让这个工作..我尝试了很多东西.. 谢谢!

编辑:在myGameCountLbl.Text = maxGames.ToString()添加断点后; myGameCountLbl似乎是空的...我很抱歉成为一个新手...我该如何解决这个问题?事实上,maxGames确实是1,所以这不是问题

5 个答案:

答案 0 :(得分:4)

如果这是造成问题的那条线:

myGameCountLbl.Text = maxGames.ToString();

然后myGameCountLbl为空,或maxGames为。鉴于maxGames是小数,表明myGameCountLbl为空。

调试到此并在相应的行上放置断点时会发生什么?这对myGameCountLbl显示了什么?

答案 1 :(得分:2)

您是否从构造函数中删除了InitializeComponent();

如果您使用设计器来构建表单UI,Visual Studio将在后台构建一个方法(Class.designer.cs)来初始化控件。如果在访问UI元素之前没有调用InitializeComponent(),则会出现NullReferenceException。

答案 2 :(得分:1)

您还可以让Visual Studio中断所有异常,或者中断所有NullReferenceExceptions,然后您可以检查发生了什么。

(调试 - >例外 - >公共语言运行时例外...)

答案 3 :(得分:0)

为什么不在该行中设置断点并调试两个对象的当前状态?来自这里的最大值在哪里?

MainForm.maxGameCountLblUpdate(最大);

答案 4 :(得分:0)

我知道这是很久以前发布的,但我遇到了同样的问题,这就是我解决它的方法。

如果你查看提供的故障排除提示,第二个提示:

  

在调用方法之前检查以确定对象是否为空。

这实际上是解决方案。使用IF语句检查要分配的值是否为空,如:

if (maxGames!=null){
      myGameCountLbl.Text = maxGames.ToString();
}

这将确保您避免将空值分配给myGameCounLbl

我希望有帮助