为什么我不能在调用myForm.close()后创建新的表单实例?

时间:2009-03-09 15:45:56

标签: vb.net exception

[编辑]
请参阅this post,了解我为什么要在全球范围内声明表单元素。

我选择重新连接我的代码以摆脱全局定义。
[结束编辑]

我在运行时动态创建。 表单,所有按钮和组合框都全局声明为父表单。

dim myForm as new form

我在上面放了一些按钮和一个我正在填充的组合框。

我可以用

显示表格
myForm.show()
myForm.bringToFront()

第一次一切正常。

当用户完成了从,我打电话:

myForm.close()
'have also tried
' myForm.Hide() and myForm.Dispose()

无论哪种方式,(即使只调用.close())第二次创建表单,我都会收到以下错误:

  

ObjectDisposedException未处理   无法访问已处置的对象。

如果我只是切换表单的可见性,每次都不会消除组合框的值 - 而且设置visibility = false似乎很抱歉。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

因为一旦您的表单关闭,就无法重新打开。

每次要打开新表单时,都必须将其重新分配给表单的新实例。如果你想要相同的实例,myForm.Show()和myForm.Hide()应该可以工作,只要你从不调用myForm.Close()

答案 1 :(得分:0)

我猜你的问题在这里:“表单,所有按钮和组合框都是全局声明为父表单。”

您正在全局定义表单,因此垃圾收集器不会自动清除它,因为它始终在作用域上。

要么您不处理表单,要么停止将其用作全局变量。