2010-07-15 47 views
1

我的C#Winform应用程序遇到无法访问处置对象的情况。处理对象是从登录表单上的按钮打开的表单(frmQuiz)。ObjectDisposedException多个表单打开时

The Situation:

我的应用程序通常有两个或三个表单同时打开。 Program.cs文件以frmLoginBackground的形式运行,它只是一个覆盖计算机屏幕的半透明背景。此表单的加载事件打开第二个表单frmLogin,其中包含一个打开frmQuiz的按钮,该按钮是一个带有几个数学问题的简单表单。

在frmLogin代码打开frmQuiz看起来是这样的:

private void btnTakeQuizNow_Click(object sender, EventArgs e) 
{ 
    frmQuiz quiz = new frmQuiz(); 
    quiz.TakeQuizNow("take_quiz_now", Convert.ToInt32(comboQuizMeNow.SelectedValue)); //Pass the form a quiz id number. 
    quiz.Show(); 
} 

当frmQuiz打开它和frmLogin是开放的和可访问的。

frmLogin还包含一个密码控制,通过首先打开基于计时器的“Please Wait ...”飞溅形式的frmSplash来打开管理表单。定时器Tick事件启动frmAdmin,这是管理表单。在frmLogin的代码看起来是这样的:

private void btnPasswordSubmit_Click(object sender, EventArgs e) 
{ 
    //Password verification code snipped. 

    frmSplash objSplash = new frmSplash(); 
    objSplash.Show(); 
    //this.Hide(); 
    this.Close(); 
} 

而且在frmSplash的代码如下所示:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    frmAdmin objfrmAdmin = new frmAdmin(); 
    objfrmAdmin.Show(); 
    this.Close(); 
} 

当frmAdmin打开然后frmLogin不再能访问;然而,frmAdmin包含“返回到登录屏幕”的代码键这样的:

private void btnReturnToLogin_Click(object sender, EventArgs e) 
{ 
    exitWarnings("return_to_login"); 
} 

private void exitWarnings(string action) 
{ 
    //Warning message code snipped. 

    if (action == "return_to_login") 
    { 
     frmLogin objLogin = new frmLogin(); 
     objLogin.Show(); 
    } 
} 

的frmLoginBackground保持打开状态,直到应用程序退出。


问题:

一切正常时frmLogin第一次打开并单击该按钮打开frmQuiz。测验表格打开运行罚款。但是,在登录管理表单(关闭或隐藏登录表单)并单击“返回登录屏幕”链接后,再次出现frmLogin后,单击按钮打开frmQuiz时会出现对象处置异常。 Visual Studio以黄色突出显示“quiz.Show();”代码行。无论天气如何,我都会使用“this.Close();”或“this.Hide();”在btnPasswordSubmit_Click事件中。

任何人都可以提出一个解决方案,允许我从frmAdmin返回frmLogin后打开frmQuiz。

干杯,弗雷德里克

回答

0

既然你只是quizz.Show()之前创建quizz一个新的实例就不能QUIZZ本身抛出异常。

请仔细阅读frmQuiz的构造函数和FormCreate事件。看起来这是死马被踢的地方。

+0

谢谢Henk。这使我指出了正确的方向。这个问题源于frmAdmin在点击'Return to Login Screen'按钮后保持打开状态,并且frmQuiz的代码不显示测验,如果frmAdmin处于打开状态 - 尽管我不明白为什么这会导致对象处置错误。但现在已经修复了。 – Frederick 2010-07-15 22:13:27