2012-04-15 11 views
1

Weit draußen, diese alte vb6 App bringt mich um. Wie habe ich jemals mit diesem Zeug vor .NET entwickelt?vb6 Class-Eigenschaft als Array einer Klasse

Ich versuche, eine VB6-Klasse mit einem Eigenschaft-Mitglied zu erstellen, das ein Array von entweder UDT oder einer anderen Klasse ist.

z.B.

Ich habe eine Klasse namens -Monitor, die einige Eigenschaften aussetzt:

  • Auflösung
  • Rotation
  • Namen
  • Breite
  • Höhe

In meinem Haupt Programm mo Ich habe eine Klasse namens SystemConfig, die eine Eigenschaft hat, die MonitorConfig genannt wird, aber zuvor hat sie nur ein Element erleichtert. Da wir jetzt in einer Welt mit mehreren Monitoren arbeiten, muss diese Eigenschaft mehr als einen Gegenstand unterstützen.

Leider vb6 gibt mir keine Liste (Of T), also brauche ich die nächstbeste Sache. Mein erster Gedanke ist, ein Array zu verwenden.

Hier ist mein Versuch:

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 

Wie erhalte ich die Eigenschaft, einen Array-Wert in und der MonitorConfig Gründstück zu erkennen?

dank

+0

mit „jetzt“ ist 15 Jahre „Weil wir jetzt in einer Welt von mehreren Monitoren arbeiten“ vor, letzte Jahrtausend :) – Deanna

Antwort

3

Ihr Code ist in Ordnung, aber es ist nicht sehr performant. Wenn Sie schreibgeschützten Zugriff auf Monitore benötigen, aber keine vollständige Sammlung implementieren möchten, reichen eine einfache Accessor-Eigenschaft und eine count -Eigenschaft aus.

Etwas wie folgt aus:

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 
+1

Sieh dir auch diese Frage an: http://stackoverflow.com/questions/9243461/vb6-and-net-array- Unterschiede/9243917 # 9243917 – Dabblernl

+0

@Dabblernl danke für den Link. groß. – Ben

3

Entweder die Eigenschaft verändern, um ein „Index“ Argument zu akzeptieren, so dass Sie es als „Array wie“ syntaktisch behandeln kann, oder auch eine Sammlung anstelle eines Arrays in Betracht ziehen.

+0

+1. Sammlungen sollten zu Arrays IMHO bevorzugt werden. Eine Eigenschaft mit "index" arg verdient eine Überlegung, aber ich finde, dass ich Collections 9 mal von 10 benutze. – MarkJ

Verwandte Themen