3

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

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

当我按下确定时,我得到 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,所以这不是问题

4

5 回答 5

4

好吧,如果这是导致问题的行:

myGameCountLbl.Text = maxGames.ToString();

然后要么myGameCountLbl为空,要么maxGames为。鉴于这maxGames是一个小数,这表明它myGameCountLbl是空的。

当您对此进行调试并在适当的行上放置断点时会发生什么?那是为了myGameCountLbl什么?

于 2009-05-14T22:03:47.703 回答
2

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

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

于 2009-05-14T22:35:48.377 回答
1

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

(调试 -> 异常 -> 公共语言运行时异常 ...)

于 2009-05-14T22:16:51.340 回答
0

为什么不在该行中放置一个断点并调试两个对象的当前状态?麦克斯从哪里来?

MainForm.maxGameCountLblUpdate(max);

于 2009-05-14T22:06:49.133 回答
0

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

如果您查看提供的故障排除提示,第二个建议是:

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

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

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

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

我希望这会有所帮助

于 2012-06-19T14:02:04.030 回答