2012-11-30 93 views
1

我的程序有多种形式。第五个也是最后一个表单有一个按钮,单击时使用Application.Exit()方法关闭应用程序。但是每次我点击我收到错误的按钮时,我的第一个形式“无法访问已释放的对象”围绕这一代码:无法访问处置对象

frm2 f2 = new frm2(); 
      this.Hide(); 
      f2.ShowDialog(); 
      this.Show(); 

编译器指示该语句this.show()的问题。有人可以解释为什么我收到这个错误,以及如何解决它?

+2

它是行'this.Hide();'异常被抛出?可能是你从('this')中显示最终表单的表单已经被处理掉了。这个例子似乎有很多代码缺失,所以它很难诊断确切的问题。 – dash

+1

哪一行是抛出的异常? – craig1231

+0

我与T.S. - 在四行代码中你有三个独立的表单变量? –

回答

2

确定编辑我的答案,我转载了你的问题。如果你想使用Form.ShowDialog那么你应该设置关闭应用程序的控件的DialogResult。因此,在按钮属性中,您应该将对话结果设置为某些内容,例如Cancel

然后点击上面的按钮时,你会做这样的事情:

private void btnClose_Click(object sender, EventArgs e) 
    { 
     if (this.DialogResult == DialogResult.Cancel) 
     { 
      Application.Exit(); 
     } 
    } 

否则,如果你不需要使用Form.ShowDialog,你可以只显示窗体2。以上不会在我的测试中产生错误。

+0

这没有意义。您不需要在刚刚创建的窗体上调用“隐藏”,也不需要调用“显示”来显示模型对话框。这两个电话在这里不需要。 – Ran

+0

如果希望应用程序干净地终止,只需关闭表单会更好。如果您的主消息循环在此表单上使用'Application.Run(form1)'开始,则应用程序将完全退出。如果不是,那么在Main中,我会为表单的“Closed”事件附加一个处理程序,该事件将调用“Application.Exit”。关键是 - 表单不应该被称为Exit。 – Ran

0

在您的代码示例中,frm2是否拨打Application.Exit?如果确实如此,那么为什么您要再次拨打this.Show

无论如何,您可能遇到了有关您如何启动应用程序的消息循环的问题。你在运行Application.Run()还是Application.Run(form1)

如果您在开始消息循环时向Application.Run()提供了一个表单,那么您不应该调用Application.Exit以退出应用程序。相反,您应该简单地关闭主窗口,这会导致消息循环结束,返回Application.Run的调用,并且您的应用程序将完全终止。

+0

对Application.Exit()的调用是在我的第五个表单和最终表单上进行的。 – JeliBeanMachine

相关问题