1

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

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

例如

我有一个名为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 属性的数组值?

谢谢

4

2 回答 2

3

要么更改属性以接受“索引”参数,因此您可以在语法上将其视为“类似数组”,或者考虑使用集合而不是数组。

于 2012-04-15T09:08:50.100 回答
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
于 2012-04-15T16:11:06.343 回答