Class vb6类属性作为类的数组

Class vb6类属性作为类的数组,class,vb6,Class,Vb6,远远地说,这个旧的vb6应用程序正在折磨我。在.NET之前,我是如何开发这些东西的 我试图创建一个vb6类,其属性成员是UDT或其他类的数组 e、 g 我有一个名为Monitor的类,它公开了一些属性: 决议 旋转 名称 宽度 身高 在我的主程序模块中,我有一个名为SystemConfig的类,它有一个名为MonitorConfig的属性,但以前它只支持一项。因为我们现在在多个监视器的世界中运行,所以我需要这个属性来支持多个项目 不幸的是vb6没有给我t的列表,所以我需要下一个最好的东西。我的第

远远地说,这个旧的vb6应用程序正在折磨我。在.NET之前,我是如何开发这些东西的

我试图创建一个vb6类,其属性成员是UDT或其他类的数组

e、 g

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

决议 旋转 名称 宽度 身高
在我的主程序模块中,我有一个名为SystemConfig的类,它有一个名为MonitorConfig的属性,但以前它只支持一项。因为我们现在在多个监视器的世界中运行,所以我需要这个属性来支持多个项目

不幸的是vb6没有给我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属性内外的数组值


谢谢

要么改变属性接受索引参数,这样就可以把它当作语法数组对待,或者考虑使用集合代替数组。

要么改变属性接受索引参数,这样就可以把它当作语法数组对待。或者考虑使用集合而不是数组。

您的代码可以,但性能不太好。如果您需要对监控器进行只读访问,但不希望实现完整的集合,那么一个简单的访问器属性和计数属性就足够了

大概是这样的:

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

您的代码还可以,但性能不太好。如果您需要对监控器进行只读访问,但不希望实现完整的集合,那么一个简单的访问器属性和计数属性就足够了

大概是这样的:

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

再看一看这个问题:再看一看这个问题:因为我们现在在一个由多个监视器组成的世界中运作,现在是15年前,上千年:因为我们现在在一个由多个监视器组成的世界中运作,现在是15年前,上千年:+1。集合应优先于数组IMHO。带有索引arg的属性值得考虑,但我发现自己使用集合的次数是10次中的9次。集合应优先于数组IMHO。带有索引arg的属性值得考虑,但我发现自己使用集合的次数是10次中的9次。