从C#WinForms App中的用户控件调用父表单时出现空引用异常

时间:2016-05-09 21:21:47

标签: c# forms user-controls parent nullreferenceexception

我在C#WinForms应用程序中遇到一个特殊问题,其中在父窗体中使用了服务器用户控件。 以下是用户控件问题的代码:

private void LoadMCQuestionScreen(clsQuestion MCQuestion)
{
    ucMultiChoiceQuestion MCQuestionScreen = new  ucMultiChoiceQuestion(MCQuestion, Players, glbintQuestionIndex,
                                                                                glbblTransYesOrNo,
                                                                                lstTransList.ElementAt(glbintQuestionIndex));

   MCQuestionScreen.Parent = this;
   MCQuestionScreen.Show();
    }

以下是发生崩溃的用户控件的代码块:

private void QuestionIsAnswered(bool TimeExpired)
{
    //MessageBox.Show("Points: " + glbintPoints.ToString(), "Info...", MessageBoxButtons.OK, MessageBoxIcon.Error);
    //Create a reference to frmMain.

    if (TimeExpired == true)
        glbblAnsweredCorrectly = false;

        frmGame form1 = (frmGame)this.Parent;
        **form1.LoadAnswerResponseScreen(glbblAnsweredCorrectly, glbstrAnsweringPlayer);**
    spTickTock.Stop();
    MCPlayer.Dispose();
    tmrMCTimer.Dispose();
    if (pbQuestionImage.Image != null)
    pbQuestionImage.Image.Dispose();
    this.Dispose();
}

我在粗线上得到NullReferenceException -

  

“对象引用未设置为对象的实例。”

在该行中,form1为null。发生崩溃时,此方法和用户控件MCQuestionScreen已经处理完毕。 我在“LoadMCQuestionScreen”方法的顶部尝试了此代码:

foreach (UserControl uctrl in this.Controls)
         uctrl.Dispose();

该代码不起作用,2天后我仍然无法确定问题的实际来源。

1 个答案:

答案 0 :(得分:0)

该错误消息表示您尝试引用尚未实例化的对象。您可能必须这样做:frmGame form1 = new (frmGame)this.Parent;

或者它可能是您的代码中我们看不到的其他位置。