【问题标题】:why can't I create new instance of form after calling myForm.close()?为什么我不能在调用 myForm.close() 后创建新的表单实例?
【发布时间】:2009-03-09 15:45:55
【问题描述】:

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

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

我在运行时动态创建一个 from。 表单、所有按钮和组合框都全局声明给父表单。

dim myForm as new form

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

我可以很好地显示表单

myForm.show()
myForm.bringToFront()

第一次一切正常。

当用户完成 from 后,我调用:

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

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

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

如果我只是切换表单的可见性,组合框的值不会每次都被清除 - 设置可见性 = false 似乎是一种抱歉的做法。

为什么会这样?

【问题讨论】:

    标签: vb.net exception


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      要么不释放表单,要么停止将其用作全局变量。

      【讨论】:

        猜你喜欢
        • 2012-01-10
        • 2019-04-07
        • 2021-02-23
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多