关于c#:NullReferenceException未处理,Object Reference未设置为对象的实例

NullReferenceException was unhandled, Object Reference not set to an instance of an object

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

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

当我按"确定"时,我在处得到NullReferenceException。

1
myGameCountLbl.Text = maxGames.ToString();

我的MaxGameCountlBlupDate方法。

以下是MAinForm中的MaxGameCountlBlupDate方法代码:

1
2
3
4
5
6
7
//Update game count label
public void maxGameCountLblUpdate(decimal maxGames)
{
    maxGames = decimal.ToInt32(maxGames);
    myGameCountLbl.Text = maxGames.ToString();
    compGameCountLbl.Text = maxGames.ToString();
}

这是我在MaxScore上的OK按钮事件:

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

注意,我已经准备好了

1
public Form1 MainForm { get; set; }

在Max评分中

我在主窗体中创建了MaxScore:

1
2
3
4
5
    using (MaxScore scoreForm = new MaxScore())
    {
        scoreForm.MainForm = this;
        scoreForm.ShowDialog();
    }

我做不到……我试过很多东西……谢谢!

编辑:在myGameCountLbl.Text=MaxGames.ToString()添加断点后;MyGameCountlbl显示为空…很抱歉我是个新手…我该怎么解决这个问题?实际上,MaxGames的计算结果是1,所以这不是问题所在。


如果这是导致问题的原因:

1
myGameCountLbl.Text = maxGames.ToString();

那么要么myGameCountLbl为空,要么maxGames为空。鉴于maxGames是一个十进制数,这表明myGameCountLbl是空的。

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


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

如果使用设计器生成窗体UI,Visual Studio将在后台(class.designer.cs)生成一个方法来初始化控件。如果在访问UI元素之前不调用InitializeComponent(),则会得到一个nullreferenceexception。


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

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


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

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

Check to determine if the object is null before calling the method.

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

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

这样可以确保避免将空值赋给mygamecounlbl

希望能帮上忙


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

mainform.maxgamecountlblupdate(最大);