PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VB - Objekt- Freigabe? (Property?)


Zwen
16.10.2002, 11:19
Hallo, ich versuche aus einer form Main auf eine Eigenschaft, die zwei Klassenebenen darunter liegt, zuzugreifen. Es gelingt aber nicht...

Voraussetzungen:
1. Form: frmMain
2. Klasse: clsObject1
3. Klasse: clsObject2
4. clsObject2 besitzt Eigenschaft varName und mArray

Ich erzeuge in frmMain clsObject1 und in clsObject1 wiederum clsObject2. clsObject2 bekommt die beiden Eigenschaften durch property get/let.

frmMain:
Dim Object1 As clsObj1
Set Object1 = New clsObj1

Dim Object2 As clsObj2
Set Object2 = New clsObj2

clsObj1:
Public Property Get varName As String
varName = lkl_varName
End Property
Public Property Let varName(ByRef par_Name As String)
lkl_varName = par_Name
End Property

Public Property Get Object2() As clsObj2
Object2 = lkl_clsObj2
End Property

clsObj2:
Public Property Get varName() As String
varName= lkl_Name
End Property
Public Property Let varName(ByRef par_Name As String)
lkl_Name = par_Name
End Property

Public Property Get mArray() As Variant
mArray = lkl_Array()
End Property
Public Property Let mArray(ByRef par_Array As Variant)
lkl_Array = par_Array
End Property
Irgendwie stimmt aber die Freigabe nicht; weder die der varName noch die des mArray, denn ich kann aus frmMain nicht per frmMain.Object1.Object2.varName zugreifen.
Wie muß ich Object2 freigeben, damit das geht? Ändert sich etwas an der Freigabe, wenn es sich um ein Array handelt, auf das ich zugreifen will? Etwa so: frmMain.Object1(1).Object2(1).varArray

Vielen Dank.

Drosophila2001
20.10.2002, 13:39
Hi,

für mich sieht es so aus, als würde die Eigenschaft object2 in object1 gar keinen Wert zugewiesen bekommen.

Mit

Dim Object1 As clsObj1
Set Object1 = New clsObj1

Dim Object2 As clsObj2
Set Object2 = New clsObj2

erstellst Du jeweils eine Instanz der beiden Klassen in Deinem Formular-Code.
Die Eigenschaft object2 von clsObj1 kann ja nur gelesen werden, was fehlt ist der Schreibzugriff:

Public Property Set Object2(newObj As clsObj2)
lkl_clsObj2 = newObj
End Property

Jetzt musst Du in frmMain nach dem Erstellen der Instanzen noch mit

Object1.Object2 = Object2

der Eigenschaft einen Wert zuweisen und kannst anschließend mit

Object1.Object2.WhatEver

auf Methoden oder Properties zugreifen.

Wenn Du mit Objekten arbeitest muß Dir klar sein, wo der Unterschied zwischen Klassen und Instanzen liegt. Der Zugriff auf Methoden und Properties eines Objekt ist nur über Instanzen möglich.

Ich hoffe, daß ich helfen konnte