2012-09-05 21 views
0

我的程序中有多個表單。菜單表單(frmMenu)包含將隱藏菜單表單並顯示其相應形式的按鈕,例如形成frmXyl。關閉窗體frmXyl應該隱藏它並顯示窗體frmMenu。VB.Net 2008試圖顯示或隱藏表單時出現「InvalidOperationException is unhandled」

「形式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 a 第二次我收到一個錯誤消息。

這是錯誤:創建表單時發生錯誤。有關詳細信息,請參閱Exception.InnerException。錯誤是:已經從其基礎RCW分離的COM對象無法使用。

我已經使用show和hide之前沒有問題的形式隱藏,在此之前,先感謝您的任何解決方案。

+0

什麼是InnerException堆棧跟蹤? 你使用的是Office嗎? – SLaks

+0

你如何關閉第二個表單?處理Form_Closing事件? – Steve

+0

你能告訴我在哪裏可以找到堆棧跟蹤嗎? Office已安裝,但未與此程序一起使用,也未運行。值得注意的是,我正在使用AxWindowsMediaPlayer cotrols並導入System.IO,AxWMPLib,WMPLib。是史蒂夫,我正在使用表格關閉事件。當我嘗試再次顯示錶單frmXyl時,就會出現問題。 – user1649142

回答

1

隱藏表單不足以防止它被丟棄。您還需要在FormClosing事件中設置e.Cancel = True以允許表單對象生存。您需要關注e.CloseReason,當您正在關閉Windows或用戶嘗試退出程序時,您不想阻止它關閉並顯示新窗體。

+0

我是否需要處理表單,如果我只是希望它被隱藏,直到它再次需要?該程序只能從frmMenu表單中關閉。 Incidentaly我只是得到這個錯誤與我的一種形式,其他所有功能(顯示/隱藏)和***不***包括e.Cancel =真 – user1649142

+0

你做* *不希望它處置,如果你想再次展示它。 ActiveX控件對此特別胡思亂想。部分問題是,您正在使用糟糕的vb.net語法來表示形式,frmMenu是*類型名稱*,而不是變量名稱。 –

+0

frmMenu是項目中某種形式的名稱,我從來沒有說過它是一個變量?!感謝您指出e.Cancel = true。我之前使用過它,但沒有意識到我需要在這裏。 – user1649142