Advertentie | |
|
![]() |
||
Citaat:
Of het de 10e naam of de 11e naam of de 12e naam is, weet je op dat moment niet, mits je een teller bij houd. Maar stel dat je het niet weet; dus dat het Names(x) is maar Names(x) is te klein voor die extra naam; je hebt Names(x + 1) nodig. Dan wil je kunnen opvragen hoe groot de array op dat moment is. Dat doe je dan met ubound(). Als je dan weet hoe groot je de array wilt hebben, gebruik je Redim Preserve om de array groter te maken, en kan je eindelijk je 11e naam in het array kwijt. |
![]() |
|
Voorbeeld code
Code:
' Option Base 1 zegt, dat standaard 1 de lbound is van arrays die we dimensioneren. ' Normaliter gesproken is dat 0 Option Base 1 ' We initializeren de huidige array NamenLijst zodat die nog geen namen kan bevatten ' We willen dat de array gewoon dynamisch groter word. Dit willen we, omdat het ' flexibel is, en omdat het geheugen uitspaart. Dim NamenLijst() As String ' En een integer die bijhoud hoeveel namen we al hebben Dim TotaalAantalNamen As Integer Private Sub btnVoegToe_Click() Dim iUpperBoundVanArray As Integer ' We willen een naam toevoegen, onderaan de array TotaalAantalNamen = TotaalAantalNamen + 1 ' We vragen de upperbound van de array op, en slaan dit even op in de integer ' iUpperBoundVanArray .. In het begin zal deze nul zijn, en met elke naam een ' groter worden. iUpperBoundVanArray = UBound(NamenLijst) ' We kijken of de array groot genoeg is; zo niet, dan willen we hem vergroten If iUpperBoundVanArray < TotaalAantalNamen Then ' We geven een melding dat het array te klein is MsgBox "Array is te klein, dus nu doen we een redim preserve!" ' Nu willen we de array met een vergroten zodat we de nieuwe naam erin kunnen zetten ' Redim betekent dat we het array al eerder gedimensioneerd hebben, en het willen ' herdimensioneren. Preserve zegt dat we de data die in het huidige array staat, niet ' willen kwijtraken. ReDim Preserve NamenLijst(TotaalAantalNamen) End If ' Uiteindelijk willen we in de nieuw gekreeerde plek, de naam op slaan. NamenLijst(TotaalAantalNamen) = txtNaam.Text ' En ten slotte, met behulp van een FOR .. NEXT loop, laten we alle namen in de ' andere textbox zien txtAlleNamen.Text = "" For iCount = 1 To TotaalAantalNamen txtAlleNamen.Text = txtAlleNamen.Text + NamenLijst(iCount) + ", " Next iCount End Sub Private Sub Form_Load() ' Hier dimensioneren we het array voor de eerste keer. We zeggen nu voor het gemak ' dat er maar drie namen in kan staan. ReDim Preserve NamenLijst(3) End Sub |
![]() |
|
![]() |
Code:
Private Sub cmdresult1_Click() 'Proberen het nut van een array te begrijpen 'Proberen met redim en preserve te werken 'Proberen met Ubound en Lbound te werken? 'proberen het te gaan snappen 'Wat moet het gaan doen? Simpel, er wordt gevraagd of je een 'naam in wilt voeren, (verplicht al 3 namen)zo ja wordt de naam opgeslagen in de array 'zo niet, dan worden de namen die in de array staan weergegeven in een textbox 'starten maar 'verplicht namen in te voeren, 3x mbv een lus Dim names(2) As String Dim i As Integer Dim name As String Dim aantal As Integer Dim totaal As Integer totaal = 2 For i = 0 To 2 name = InputBox("Voer een naam in", "Naaminvoer") names(i) = name Next i Dim vraag As String 'vraagt aan de gebruiker of die nog n naam wilt invoeren vraag = MsgBox("Wil je nog een naam invoeren?", vbOKCancel + vbQuestion, "Naam invoeren") If vraag = vbOK Then name = InputBox("Voer een naam in", "Naaminvoer") Dim waarde As Integer waarde = UBound(names) waarde = waarde + 1 ReDim Preserve names(waarde) names(waarde) = name Else txtText.Text = "" aantal = UBound(names) For A = 0 To aantal txtText.Text = txtText.Text & names(A) & vbNewLine 'ReDim Preserve names(UBound(names) + 2) Next A End If End Sub |
![]() |
||
![]() |
Citaat:
![]() ![]() - Moet je altijd in het general declarations gedeelte dim array() as datatype neergooien als je met deze soort array gaat werken?En dan ook zonder waarde? - Waarom moet dat? - Waarom moet je, voordat je met die array gaat werken, redim array(aantal) neerzetten? Dit was het denk ik wel, als er iets niet lukt dan hoor je het wel... ![]() |
![]() |
||
Citaat:
- Moet je altijd in het general declarations gedeelte dim array() as datatype neergooien als je met deze soort array gaat werken?En dan ook zonder waarde? Nee hoor; je mag het ook in de functie zelf doen, alleen dan verlies je het array plus de inhoud, zodra de functie afgelopen is. Als je het in het general declarations gedeelte doet, behoud je het en kan je het ook in andere functies gebruiken. (En als er nu weer een of andere wijsneuzerige irritante *** met Object Orientated achtige dingen gaat smijten en stomme dingen gaat roepen ![]() ![]() - Waarom moet dat? Zie vorige tekst ![]() ![]() - Waarom moet je, voordat je met die array gaat werken, redim array(aantal) neerzetten? In principe moet je gewoon als eerste Dim MyArray() as String doen, maar dan is die nog leeg, en functies zoals ubound en lbound gaan de mist in. Daarom dat je dan gelijk zoiets als Redim MyArray(0) moet doen, wil je niet dat die crasht bij lbound/ubound dingen. Maar je kan het ook allemaal zelf uitproberen he ![]() ![]() |
![]() |
|
![]() |
Bedankt voor je uitleg
![]() ![]() Alleen ik zit nu weer met het volgende. Hoe kan je erachter komen wat het hoogste is in deze regel: MDIForm1.mnubestand(1) Zoals je mss ziet gaat het hier om een menu. Ik heb 4x mnubestand en de index loopt van 1 t/m 4. Alleen nu wil ik vb6 er zelf achter laten komen wat de hoogste waarde is. Ubound(MDIForm1.mnubestand) ^ Dit werkt niet, en als ik dit doe in MDIForm1: Ubound(mnubestand) doet hij dat ook niet. Ik snap het niet. mnubestand is toch een array? Hij zegt namelijk dat er in ubound geen array zit ![]() Weten jullie mss een oplossing? Alvast bedankt |
![]() |
||
![]() |
Citaat:
Bedankt alvast |
![]() |
|||
![]() |
Citaat:
Citaat:
__________________
Ooit. Dan.
|
Advertentie |
|
![]() |
|
|