很久以前,这个旧的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属性中的数组值?
感谢
答案 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