2011-01-24 77 views
4

我有两种形式;一个叫做'赢',另一个叫'失'。 “赢”表单上有一个按钮,显示“损失”表单。点击此按钮时,两种形式都可见。当我关闭了“损失”的形式,然后点击“双赢”窗体上的按钮,我再次出现以下情况例外:c#winform编程

An unhandled exception has occured: Unable to access a disposed object ..object :form

请可能有人点我在正确的方向,所以我可以解决这个问题?

+1

您是否确定您每次点击按钮时都会创建一个窗体的新实例... – 2011-01-24 13:14:26

+0

肯定需要了解更多代码 – 2011-01-24 13:22:23

+0

您想实现什么目标? '赢'的形式应该从'损失'形式检索一些数据? – 2011-01-24 13:39:36

回答

1

在引用它之前,您可以验证表单的IsDisposed属性。

E.g.关于“双赢”的形式按钮单击处理程序:

if (loss.IsDisposed) 
    return; 

// do stuff with loss form 

更新:我认为这是最好不要共享形式之间的控制。

  1. 您可以运行'丢失'形式作为对话框。在对话框关闭后读取所有需要的属性。
  2. 您可以订阅“损失”表单事件并以“赢”形式处理它们。
4

这是因为你的'损失'表已经关闭并且已经处理完毕,所以不能再使用了。您需要创建窗体的新实例,像这样(不知道你的代码究竟是如何看起来):

this.loss = new LossForm(); 
this.loss.Show(); 
0

这不是你要一个很好的模式,但你可以挂接到的FormClosing事件,取消它,然后隐藏表单。这意味着表单不会自动处理,您可以再次致电演出。

把时间放在一边研究MVC架构 - 起初看起来很复杂,但它确实有帮助。