无法访问已处置的对象.NET

时间:2009-03-26 09:36:33

标签: vb.net

我在.NET中有一个Windows窗体,可用作实现某些功能的向导。这包含3个步骤:Step1,Step2,Step3。

每个步骤实际上也是一个用户控件。主窗体包含一个显示当前步骤的面板。当我在步骤之间改变时,则:

1)通过调用Dispose()方法来处理当前用户控件 2)清除主模板
3)初始化下一步的用户控制并将其添加到主面板中

现在,问题是,第一步的用户控制包含一个用户控件。当我换到另一个步骤并返回到第1步时,我收到以下错误:

"Cannot access disposed object."

因为在实际显示另一个步骤之前我必须首先处理用户控件。当我回到步骤1并尝试在步骤1打开用户控件时,它会给出上述错误。

2 个答案:

答案 0 :(得分:1)

控件的控件集合中的所有内容都在处理控件时处理。因此,如果您需要重用这些用户控件,则需要在处理它之前将其从父用户控件中删除。

在显示下一个控件之前,您实际上不必处置用户控件。您可以将其从主窗体中删除,并在步骤更改时将新窗体放在主窗体上。将用户控件保留在列表或字典中,并在主窗体关闭时将它们全部丢弃。

答案 1 :(得分:1)

为什么需要处理用户控件?通常,当表单关闭时,它将为您处理所有子控件。

当你在一个物体上召唤处理时,你实际上是在告诉它消失......你不再需要它了。你无法改变主意 - 一旦它被处理掉,它就消失了。不要再尝试使用它了。

通常,您不直接在对象上调用dispose;你应该使用“使用”模式来避免在你再次需要之前处理一个对象,并确保在你完成它之后处理它。