将控件添加到集合会导致它们从控件阵列中删除

时间:2014-12-05 12:04:21

标签: vb6 garbage-collection runtime-error

所以我有一个包含各种控件的表单,所有控件都在设计时添加。 我希望在表单忙于执行任务时禁用(作为一个组)此页面中的某些控件,以便用户无法进行干扰。

为此,我创建了一个添加相关控件的集合对象。它们的控件在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

InterfaceObjects是表单的私有成员。 添加一个手表来断开LowResolutionTextBox(0)的更改会在(InterfaceObjects.Add GoButton

行中断(在某些表单上加载,而不是全部)

当我为interfaceobjects创建一个新的集合实例时,是否会发生奇怪的事情?为什么?是什么导致(甚至可能导致)控件在没有被删除的情况下从原始控制阵列中丢失?

(这一切都发生在IDE中运行时。没有使用compliled版本进行测试)

1 个答案:

答案 0 :(得分:1)

您是否在Nothing处将收藏集设为Form_Unload

在我将控制数组元素引用到变量之前,我发生了这种情况,并且在卸载时我没有将变量设置为空。