2009-09-08 70 views
5

我正在嘗試編譯一個VB6應用程序,但它失敗並顯示錯誤「運行時錯誤'91':對象變量或塊變量未設置」。事實證明,用戶控件的Resize事件在編譯和調用試圖訪問尚未實例化的對象的代碼時觸發。爲什麼在編譯VB6應用程序時觸發事件?

爲什麼在編譯過程中事件觸發,有什麼方法可以阻止它?


編輯:我有一些代碼在這裏,但它是不相關的。由UserControl代碼(即Initialize,ReadProperties,Resize和WriteProperties事件)可以在意外時間執行的事實導致問題。如果這些事件中的代碼依賴於其他代碼來初始化它的任何數據結構,那麼它很可能會失敗,因爲初始化代碼可能沒有執行。特別是在編譯時,什麼都不應該執行!我會把這稱爲一個錯誤,但我相信微軟可以以某種方式理順它。

+1

這點確實給特定的代碼塊在你的編譯(在調試)?如果是這樣,你可以把它粘貼在這裏嗎?此外,你確定你不是「建造和運行」,它會導致它建立並在試圖運行時彈出(因此,運行時錯誤)? – JasCav 2009-09-08 18:39:51

回答

6

這裏的是對用戶控件事件

Understanding Control Lifetime and Key Events

的生命週期一個很好的文章在這裏是一個片段

編譯項目

當項目被編譯成一個 應用程序或組件,Visual Basic 不可見地加載所有表單文件, 一個接一個,爲了將他們包含的信息寫入 編譯的文件。控件實例獲取Initialize,ReadProperties和WriteProperties事件 。該控件的 屬性設置被編譯爲 已完成的可執行文件。

它沒有提到調整大小(這發生在運行時或者在設計時在物理上調整容器上的usercontrol的大小)。也許你的Initialize事件正在調整用戶控件的大小?

爲了避免在有問題的對象做任何事情之前已經創建可以檢查錯誤:

If Not Object Is Nothing then 
    do something 
+0

另一個片段說,*每當用戶運行已安裝的應用程序或組件,並加載表單時,控件將接收Initialize,ReadProperties和Resize事件。*如果窗體被隱藏加載,這就可以解釋爲什麼此事件正在觸發。 – raven 2009-09-08 19:32:07

1

我認爲用戶控件的某些事件在設計時被執行,至少是爲了以一致的方式呈現它們。

+0

在用戶控件的情況下,這包括可能觸發事件的UserControl_Initialize()...。 – Brian 2009-09-08 18:34:25

+0

他們可以做的比這更多。請參閱UserControl的EditAtDesignTime屬性。 – Bob77 2009-09-08 19:21:07

相關問題