Kan men een zelf gedefinieerd object als parameter doorgeven?

Status
Niet open voor verdere reacties.

MDN111

Gebruiker
Lid geworden
13 aug 2007
Berichten
503
Hallo !

Niet zo lang geleden ontdekte ik wat meer over de zelfgedefinieerde objecten in class modules. Omdat zulks mij zeer interessant lijkt, heb ik een poging gedaan om zoiets te programmeren. Het lijkt allemaal wel te lukken maar er is een probleem waar ik niet direct uit geraak.

Zie bijlage, a.u.b.

Ik heb een classmodule met de naam Child en ieder Child heeft 3 properties: Naam, Leeftijd en School, een logical die aangeeft of het naar school gaat. In die class module heb ik de properties geprogrameerd zoals ik dat gevonden heb op verschillende sites. Tot hiertoe geen probleem.

Dan heb ik nog een class module met de naam Man. Een Man heeft 3 properties: Naam, Leeftijd en een derde property Children, dat in feite een collection object is dat het aantal kinderen bevat. Het is de bedoeling dat ieder item in dat collection object zelf een object is van het type Child.

Om een kind toe te voegen aan het collection object heb ik de sub AddAChild(oChild) voorzien waarin ik het object oChild (van het type Child) als parameter wil doorgeven. Daar gaat het fout. Er volgt een error message die zegt dat het object deze methode niet ondersteund.

Op het eerste zicht zou men zeggen dat men een zelf gedefinieerd object niet als parameter kan doorgeven, maar dat lijkt mij nogal kras.

Kan iemand mij zeggen wat er mis is?

Bij voorbaat dank,
MDN111.
 

Bijlagen

Zet er sowieso een collection tussen van children, dus: Man > Children > Child

De man heeft namelijke meerdere kinderen verwjst dus naar een collectie (i.p.v. dat je die onderbrengt onder 'Man'.

Overigens zou ik om het e.e.a. leesbaar te maken/houden de collecties anders noemen:
- Man > clsMan
- Child > clsChild
- Children > colChild

dus clsMan > colChildren > clsChild

Voor de 'For Each' moet je kijken of dat zo kan in VBA. Ik weet dat in VB6 je daar (zonder gebruik van de VB Class Builder) wat bijzondere dingen voor moet doen... :confused:

Succes!
 
Hallo Eelco !

Bedankt voor je snelle reactie !

Ik heb je raad opgevolgd door in de codemodule een collection object (colChildren) te creëren, er drie kinderen (lees: child-objecten) aan toe te voegen en vervolgens dit collection object toe te wijzen met de eenvoudige toewijzing: SomeMan.Children = colChildren. Dat werkt dus zonder problemen. Het resultaat kan je zien in TestClass3.xls.

Vervelend als ik ben :-), voelde ik mij daar niet zo goed bij. Ik vond deze wijze van werken niet echt elegant want we moeten naar het niveau van de codemodule om het collection object te behandelen. En we kunnen bijvoorbeeld de situatie krijgen waarin de property SomeMan.Children bestaat uit een verzameling van child objecten waaraan we er nog één willen toevoegen. Dan moeten we in de codemodule eerst die verzameling in een ander collection object onderbrengen (op codemodule level), er in de codemodule één aan toe voegen en vervolgens terug toewijzen aan de property. Dat vond ik nogal omslachtig.

Bij het uitwerken van je suggestie kwam ik op een punt waarop ik aan het collection object een child object moest toevoegen. Dat moest uiteraard met de Add methode. Toen kreeg ik het idee om die Add methode eens toe te passen op de property SomeMan.Children en dat blijkt nog te werken ook. Het resultaat kan je zien in TestClass2.xls (gewijzige versie ten opzichte van daarstraks).

Nogmaals dank & groeten,
MDN111.
 

Bijlagen

Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan