2014-12-05 62 views
2

因此,我有一個包含各種控件的窗體,全都在設計時添加。 這個頁面中的一些控件我想在表單忙於執行任務時禁用(作爲一個組),以便用戶不能干擾。將控件添加到集合導致它們從控制陣列中刪除

爲此,我創建了一個相關控件添加到的集合對象。他們的控件被添加到form_load的這個集合中。 (如果有任何動態控件,我會將它們添加到此集合中,因爲它們也是創建的)。

但是,我開始收到間歇性運行時錯誤,對象沒有在自己的控制數組中找到(它們仍然被加載,因爲您可以在窗體中看到它們並與它們進行交互)。 Form_load可見如下

Private Sub Form_Load() 
    Dim Item As Variant 
    SelectScanCombo.Enabled = False 

    LowResolutionTextBox(0).Text = Target_LO_Res 
    HighResolutionTextBox(0).Text = Hi_Res_Resolution 

    Set InterfaceObjects = New Collection 
    InterfaceObjects.Add GoButton 
    InterfaceObjects.Add FilePathBox 
    InterfaceObjects.Add HighResEnabled 

    For Each Item In LowResolutionTextBox 
     InterfaceObjects.Add Item 
    Next Item 
    For Each Item In HighResolutionTextBox 
     InterfaceObjects.Add Item 
    Next Item 
    For Each Item In ResolutionModeSelect 
     InterfaceObjects.Add Item 
    Next Item 

    RunInProgress = False 

End Sub 

InterfaceObject是表單的私有成員。 添加手錶以斷裂LowResolutionTextBox(0)的變化(在某些表單加載中,不是全部)在界面對象上創建新的集合實例時會發生奇怪的事情嗎?爲什麼?什麼是造成(甚至可能導致)控制從他們的原始控制陣列丟失而不被擦除?

(這一切都發生在IDE中運行時,與compliled版本未測試)

回答

1

你設置爲Form_Unload收集到Nothing

當我將一個控件數組元素引用到一個變量並且在卸載時沒有將該變量設置爲空時,它發生在我身上。

+0

因此,當表單被卸載並且垃圾回收清除了引用該控件的變量時,它也清除了該控件? 似乎值得調查,會試試謝謝。 (目前正在使用工作) – CMaster 2014-12-11 08:39:58

+0

它並不總是隻發生在某些情況下,我不確定何時使用一個引用控件或對象的變量,但一般而言重要的是,您應該清理該變量卸載時釋放參考 – 2014-12-11 12:19:13

相關問題