collections - VB6:在集合中存储和检索表单

标签 collections vb6 casting

在 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' 等

有什么想法吗?

最佳答案

在 VB6 中不能像这样使用括号。试试这个

    formCollection.Add newForm

或者这个

    Call formCollection.Add(newForm)

在您的情况下,括号强制 VB6 评估对象引用的默认属性,并将其存储在集合中,而不是表单引用中。

通常您会在 IDE 中像这样在左括号之前获得一个额外的空间

    formCollection.Add (newForm)

这会让你更加怀疑。

关于collections - VB6:在集合中存储和检索表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7237259/

相关文章:

java - 有没有更好的方法来使用 Java 流映射映射值?

c# - 如何使用 C# 从数据库打印(在打印机上)表

c - *(<类型>*)(<常量>) 是什么意思?

c# - 实现不同类型数组集合的更好方法

java - 为什么 LinkedList 和 arraylist 在 java 中扩展 AbstractList?

VB6 在用户控件的终止事件之后调用初始化事件

vb6 - 从未从打印对话框中传递的份数,始终为 1

MySQL 比较 VARCHAR 列

c++ - 引用类型删除的 void*

backbone.js - 如果服务返回 JSON 数据,我是否仍然应该使用 this.collection。 toJSON()?