[VB6] Item aan dynamische array toevoegen

Pagina: 1
Acties:

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 10:29
Hallo,

Ik probeer er al de heledag achter te komen hoe ik een item aan een dynamische array kan toevoegen. Ik kan er niet achter komen en ik denk dat ik nu ook niet meer zo fris denk. Misschien kunnen jullie mij weer een eindje op weg helpen?

Dit is de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit

Private Type Onderdeel
    strNaam As String
    strDatum As Date
End Type

Dim Onderdelen() As Onderdeel

Private Sub cmdToevoegen_Click()
    ReDim Preserve Onderdelen(UBound(Onderdelen) + 1) As Onderdeel
    With Onderdelen(UBound(Onderdelen))
        .strDatum = Now
        .strNaam = txtNaam.Text
    End With
End Sub


Hij geeft deze error:
Subscript out of range
Op deze regel:
ReDim Preserve Onderdelen(UBound(Onderdelen) + 1) As Onderdeel

Ik heb het zo helder mogelijk uit proberen te leggen maar wanneer iets niet duidelijk is hoor ik dat graag.

Weet iemand dus hoe ik een item aan een variabele array kan toevoegen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Array vergroten, en geheugen reserveren voor het nieuwe item toe te voegen lijkt me.

Heb je in VB6 trouwens geen 'collection' objects; zoals TObjectList in Delphi of ArrayList in C# en VB.NET bv?

https://fgheysels.github.io/


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 10:29
whoami schreef op 13 mei 2003 @ 16:08:
Array vergroten, en geheugen reserveren voor het nieuwe item toe te voegen lijkt me.

Heb je in VB6 trouwens geen 'collection' objects; zoals TObjectList in Delphi of ArrayList in C# en VB.NET bv?
Dat doe ik toch met deze regel:
ReDim Preserve Onderdelen(UBound(Onderdelen) + 1) As Onderdeel
of niet?

Van Delphi, C# en VB.NET heb ik geen kaas gegeten...

Verwijderd

Of je met "Dim Onderdelen() As Onderdeel" in je sub zetten of hem private of public maken!
Volgens mij moet het dan lukken.

EDIT:
Je kan trouwens veel beter een collectie maken van je onderdelen-object!

[ Voor 29% gewijzigd door Verwijderd op 13-05-2003 16:21 ]


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Voordat je REDIM preserve aanroept moet je eerst je array initialiseren anders krijg je idd die error als je de upper bound wilt opvragen.

Eerst moet je dus deze code uitvoeren:
Visual Basic:
1
ReDim Onderdelen(0)

It’s nice to be important but it’s more important to be nice


Verwijderd

@
JonkieXL jij hebt idd gelijk

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Slagroom schreef op 13 May 2003 @ 16:12:
[...]


Van Delphi, C# en VB.NET heb ik geen kaas gegeten...
Dat hoeft ook niet.
Ik vroeg gewoon of je in VB ook collection-'classes' (huh? in VB? ;) ) hebt. Dat zijn dus classes die dat allemaal voor jou gaan doen.

bv:
code:
1
anObjectList.Add (myObject);


Als je objectlist dan 'vol' is, en je gaat er nog een object aan toevoegen, dan gaat die list automatisch groeien.

https://fgheysels.github.io/


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Collections zijn soms wat trager dan een dynamische array. Lastige is alleen dat de functie UBound niet kan omgaan met een uninitialized array. Kunt het beste een eigen functie schrijven met een error handler die een UBound fout afvangt en dan bijvoorbeeld -1 laat terug geven.

Als je je dynamische array weer wilt vrijgeven dan moet je Erase gebruiken... niet vergeten.

Verwijderd

@

Tis misschien wel iets trager maar veel flexibeler herbruikbaar; Zijn even lastig om zo door te hebben; maar als je netjes wilt programmeren moet je wel echt object georienteerd programmeren.

Als je bijv. een object "vervoersmiddel" hebt dan heeft het object een collectie objecten "wiel" en het wiel kan bijvoorbeeld weer een collectie objecten "spaken";

Tis mischien een flauw voorbeeld maar collecties werkt echt flex; Eenmaal geschreven dan kan je hem echt goed hergebruiken.

EDIT:
Via CLassbuilder in Visual Basic Studio 6 kan je makkelijk met een paar drukken op knoppen mooie classes en collecties maken

[ Voor 16% gewijzigd door Verwijderd op 13-05-2003 17:19 ]

Pagina: 1