vb6 Class属性作为类的数组

时间:2012-04-15 06:20:17

标签: class vb6

很久以前,这个旧的vb6应用程序正在杀了我。我是如何在.NET之前使用这些东西开发的。

我正在尝试使用属性成员创建一个vb6类,该成员是UDT或另一个类的数组。

e.g。

我有一个名为 Monitor 的类,它暴露了一些属性:

  • 分辨率
  • 轮换
  • 名称
  • 宽度
  • 高度

在我的主程序模块中,我有一个名为SystemConfig的类,它有一个名为MonitorConfig的属性,但之前它只促进了一个项目。因为我们现在在多个监视器的世界中运行,所以我需要这个属性来支持多个项目。

不幸的是vb6没有给我List(Of T)所以我需要下一个最好的东西。我的第一个想法是使用数组。

这是我的尝试:

Private m_MonitorConfig() As Monitor

Public Property Get MonitorConfig() As Monitor()
    MonitorConfig = m_MonitorConfig
End Property
Public Property Let MonitorConfig(val() As Monitor)
    m_MonitorConfig = val
End Property

如何让属性识别MonitorConfig属性中的数组值?

感谢

2 个答案:

答案 0 :(得分:3)

更改属性以接受“index”参数,以便您可以在语法上将其视为“数组类似”,或者考虑使用Collection而不是数组。

答案 1 :(得分:3)

你的代码还可以,但效果不是很好。如果您需要只读访问监视器但不想实现完整的集合,那么一个简单的访问器属性和计数属性就足够了。

这样的事情:

Option Explicit

Private Declare Function EmptyMonitorsArray Lib "oleaut32" Alias "SafeArrayCreateVector" (Optional ByVal vt As VbVarType = vbObject, Optional ByVal lLow As Long = 0, Optional ByVal lCount As Long = 0) As Monitor()

Private m_MonitorConfig() As Monitor

Property Get MonitorConfig(ByVal Index As Long) As Monitor
    Set MonitorConfig = m_MonitorConfig(Index)
End Property

Property Get MonitorConfigs() As Long
    MonitorConfigs = UBound(m_MonitorConfig) + 1
End Property

Private Sub Class_Initialize()
    m_MonitorConfig = EmptyMonitorsArray
End Sub