【问题标题】:VB.Net 2008 "InvalidOperationException was unhandled" when trying to show or hide forms尝试显示或隐藏表单时,VB.Net 2008“InvalidOperationException 未处理”
【发布时间】:2012-08-30 05:42:27
【问题描述】:

我的程序中有多个表单。菜单表单 (frmMenu) 包含将隐藏菜单表单并显示其相应表单的按钮,例如形成frmXyl。关闭窗体 frmXyl 应该隐藏它并显示窗体 frmMenu。

'窗体frmMenu按钮点击事件

    'Hide the form frmMenu
     Me.Hide()
    'Show the form frmXyl
     frmXyl.Show()

'这是窗体frmXyl窗体关闭事件

    'Hide the form frmXyl
    Me.Hide()
    'Show the form frmMenu
    frmMenu.Show()

我可以启动程序并单击按钮隐藏frmMenu并显示frmXyl,然后我可以关闭隐藏frmXyl并显示frmMenu的frmXyl。

现在,如果我第二次点击显示 frmXyl 并隐藏 frmMenu 的按钮,我会收到错误消息。

这是错误:创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:无法使用已与其底层 RCW 分离的 COM 对象。

我之前使用过表单的显示和隐藏没有问题,在此先感谢您可能需要的任何解决方案。

【问题讨论】:

  • InnerException 堆栈跟踪是什么?你在使用 Office 吗?
  • 如何关闭第二个表单?处理 Form_Closing 事件?
  • 你能告诉我在哪里可以找到堆栈跟踪吗? Office 已安装,但未与此程序一起使用,也未运行。值得注意的是,我正在使用 AxWindowsMediaPlayer 控制和导入 System.IO、AxWMPLib、WMPLib。是的,史蒂夫,我正在使用表单关闭事件。当我再次尝试显示 frmXyl 表单时,就会出现问题。

标签: vb.net invalidoperationexception


【解决方案1】:

隐藏表单不足以防止它被丢弃。您还需要在 FormClosing 事件中设置 e.Cancel = True 以允许表单对象存在。您需要注意 e.CloseReason,当 Windows 正在关闭或用户试图退出您的程序时,您不想阻止它关闭并显示新表单。

【讨论】:

  • 如果我只是希望它被隐藏直到再次需要它,我是否需要处理它?该程序只能从窗体 frmMenu 关闭。顺便说一句,我只在我的一个表单中遇到此错误,其他所有功能(显示/隐藏)和 do not 包括 e.Cancel = True
  • 如果您想再次显示它,您确实希望它被丢弃。 ActiveX 控件对此特别反感。部分问题是您使用糟糕的 vb.net 表单语法,frmMenu 是 类型名称,而不是变量名称。
  • frmMenu 是项目中其中一个表单的名称,我没说过是变量?!感谢您指出 e.Cancel = true。我以前用过它,但没有意识到我在这里需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多