• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

een speciale get property

Status
Niet open voor verdere reacties.

sylvester-ponte

Verenigingslid
Lid geworden
19 apr 2007
Berichten
6.551
in een klas met een private collection wil ik graag ipv:
a=g.item(2)
a=g(2) kunnen gebruiken.
hoe moet dat ?
zie voorbeeld:
 

Bijlagen

  • test klas gesorteerde unieken 3.xlsm
    17,7 KB · Weergaven: 46
Je hebt toch zelf in je Class Module de eigenschap Item aangemaakt (die er trouwens dubbel in staat...). Wat is er overigens mis met het feit dat je die eigenschap moet inzetten???
 
Ginger, stom van mij dat het er dubbel instaat.

maar bij bv dictionary en collection is het wel mogelijk.
 
zie bestandje

  • Haal die dubbele get item weg
  • exporteer de klasse en verwijder 'm uit het bestand
  • open de geëxporteerde klasse in notepad
  • plaats: Attribute Value.VB_UserMemId = 0
  • 1 regel onder Property Get Item(N)
  • sla de klasse weer op
  • importeer jouw klasse in het bestand
  • Nu kun je .item weglaten omdat item nu de default is
 

Bijlagen

  • test klas gesorteerde unieken 3.xlsm
    19,3 KB · Weergaven: 44
Laatst bewerkt:
Eric, geweldig.

en nu de volgende vraag:

is het ook mogelijk dit te doen
Code:
sub test
Dim G As New gesorteerdeUnieken
...........
For each I in G
 
Ja dat is mogelijk

In dat txt bestandje plaats je erbij;
Code:
Public Property Get NewEnum() As IUnknown
 Attribute NewEnum.VB_UserMemId = -4
 Set NewEnum = C.[_NewEnum]
End Property

let op die C is de naam van jouw Collection

Opslaan en weer importeren
 
nog een vraag: ik doe het nu zo:
Code:
Private C As New Collection
Private C_omgekeerd As New Collection
Private Omgekeerd As Boolean

Public Property Get NewEnum() As IUnknown
If Omgekeerd Then
    Set NewEnum = C_omgekeerd.[_NewEnum]
Else
    Set NewEnum = C.[_NewEnum]
End If
End Property
als het mogelijk is om van de _NewEnum de pionterwaarde te verkrijgen,
dan hoef ik maar met 1 collection te werken.
is dat mogelijk?
 

Bijlagen

  • test klas gesorteerde unieken 2.xlsm
    21,5 KB · Weergaven: 39
Laatst bewerkt:
Je bedoelt objptr() ?

als je het enkel gebruikt om omgekeerd te printen zou je ook 'backwards' kunnen 'loopen'

kennis; tsja.. diverse fora, interesse in Klassenmodules, google, trial and error, boeken (in ieder geval: ◾Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA, and .NET (2nd Edition) by Rob Bovey, Dennis Wallentin, Stephen Bullen, John Green) en gaandeweg blijft er wat hangen ;)
 
Eric, ik bedoel geen objptr().

als ik " for each I in G " gebruik , wordt de "Public Property Get NewEnum() As IUnknown" maar 1 keer aangeroepen.

zou ik graag willen dat een "Get Property" bvb "Property Get Item(N)" steeds aangeroepen wordt.
dan weet ik welk item nr doorgegeven moet worden.
dan als Omgekeerd True is, kan ik zelf het juiste item doorgeven (dat is dan item(G.count - N).
 
Volgens mij kun je niet iedere aanroep 'vangen'. VBA roept deze property (of funktie) inderdaad maar 1 keer aan. (ik zie dit als aanzetten van de For Each loop)
In jouw code dus 2 maal: 1 keer voor de collectie c_omgekeerd en 1 keer voor de collectie c

normaliter verberg je deze code door
Attribute NewEnum.VB_MemberFlags = "40"
nog toe te voegen
 
Eric, bedankt voor de les.

wat zou jij doen?

met 2 collecties werken zodat dit mogelijk is: for each I in G

of met 1 collectie werken en hem aanroepen met: for each I in G.toarray
 
Ligt eraan wat jouw uiteindelijke doel is, maar als het enkel een 'omgekeerde' collectie is met dezelfde data, zou ik voor 1 gaan (dan weet je zeker dat jouw data altijd 1 op 1 hetzelfde is, minder geheugen etc.)
 
dan gaat dit het ongeveer worden (zonder NewEnum en dus "for each I in G.toArray" gebruiken ipv for each I in G" ):

Eric, nogmaals dank .
 

Bijlagen

  • test klas gesorteerde unieken 4.xlsm
    21,2 KB · Weergaven: 32
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan