在VB6中获得一些奇怪的行为,我正在为一些答案抛出一个网。
我有一个集合,我用它来存储一组相同类型的自定义表单。
Dim formCollection As New Collection
Public Sub AddForm()
Dim newForm As New frmCustomForm
formCollection.Add(newForm)
End Sub
然后在另一个例程中我遍历集合。但是当我将变量强制转换回自定义表单类时,我得到了类型转换错误(“运行时错误'13':类型不匹配”)。
Public Sub Foo()
Dim someForm As frmCustomForm
Dim iterator As Integer
For iterator = 1 To formCollection.Count
Set someForm = formCollection.Item(iterator) ' The error appears here
someForm.SomeProperty = 3
Next iterator
End Sub
似乎虽然最初它是自定义表单类,因为它存储到集合中,它丢失了它的类型,无法返回。此外,如果我在尝试转换存储的表单之前放置断点然后通过Locals检查对象,则会丢失所有类特定的信息,例如属性名称,这些信息仅显示为“Item 1”,“Item 2”,第3项,等等。
有什么想法吗?
答案 0 :(得分:3)
你不能在VB6中使用这样的括号。试试这个
formCollection.Add newForm
或者
Call formCollection.Add(newForm)
在您的情况下,括号强制VB6评估对象引用的默认属性,并将其存储在集合中,而不是表单引用中。
通常在IDE中就像在这个
之前的开始括号中获得额外的空间 formCollection.Add (newForm)
这会让你更加怀疑。
答案 1 :(得分:1)
尝试:
Public Sub Foo()
Dim someForm As frmCustomForm
For Each someForm In formCollection
someForm.SomeProperty = 3
Next
End Sub
答案 2 :(得分:0)
Scripting.Dictionary可能比Collection更好。它比集合更强大,更快。您需要在项目中引用scrrun.dll。