VB6:如何访问其他类成员数组中的类实例?
VB6中访问类内数组元素的解决方案
问题根源
你最初的写法错误在于:
- 原
Positionen函数返回的是单个Position对象,而非数组,因此无法用(0)索引访问; - 即使改成返回
position()类型的属性,VB6也不支持直接链式调用k.Positionen(0),必须先将数组赋值给局部变量。
下面提供两种可行的实现方式:
方式一:返回完整数组,通过局部变量访问
修改Kostenvoranschlag类,正确定义返回数组类型的属性,同时补充数组初始化逻辑:
Class Kostenvoranschlag Private m_Positionen() As Position ' 初始化数组及内部的Position实例 Public Sub InitPositionen(count As Integer) ReDim m_Positionen(count - 1) Dim i As Integer For i = 0 To count - 1 Set m_Positionen(i) = New Position Next i End Sub ' 返回完整的Position数组 Public Property Get Positionen() As Position() Positionen = m_Positionen End Property End Class Class Position Public Betrag As Currency End Class
外部调用代码:
Dim k As New Kostenvoranschlag k.InitPositionen(1) ' 先初始化数组和元素 Dim posArray() As Position posArray = k.Positionen ' 将属性返回的数组赋值给局部变量 posArray(0).Betrag = 5
方式二:添加带索引的属性(更符合VB6习惯)
给Kostenvoranschlag类添加直接通过索引访问单个Position对象的属性,调用更简洁:
Class Kostenvoranschlag Private m_Positionen() As Position ' 初始化数组及内部的Position实例 Public Sub InitPositionen(count As Integer) ReDim m_Positionen(count - 1) Dim i As Integer For i = 0 To count - 1 Set m_Positionen(i) = New Position Next i End Sub ' 通过索引返回指定位置的Position对象 Public Property Get Position(index As Integer) As Position Set Position = m_Positionen(index) End Property ' 可选:返回数组元素数量的属性 Public Property Get PositionCount() As Integer PositionCount = UBound(m_Positionen) - LBound(m_Positionen) + 1 End Property End Class Class Position Public Betrag As Currency End Class
外部调用代码:
Dim k As New Kostenvoranschlag k.InitPositionen(1) k.Position(0).Betrag = 5 ' 直接通过索引访问
注意事项
- 无论哪种方式,都必须先初始化数组,并且给每个数组元素实例化
Position对象(用Set关键字),否则会触发“对象变量或With块变量未设置”错误; - 方式二的带索引属性是VB6中处理集合/数组的常用写法,可读性和易用性更强。
内容的提问来源于stack exchange,提问作者tmighty
相关产品推荐
相关产品推荐

