[vb] foutmelding bij vullen van array

Pagina: 1
Acties:

  • chrisstructor
  • Registratie: Juni 2001
  • Laatst online: 01-02-2020

chrisstructor

Employ your more evil being

Topicstarter
Ik wil een dynamisch array aanmaken, waarin data wordt opgeslagen in het geheugen.

Hiertoe doe ik het volgende :

aantal = Val(txtaantal.Text) 'txtaantal.text is een geheel getal van 1 t/m 30

Dim dynamicarray() As Single
Dim vakteller as integer

For vakteller = 0 To (aantal - 1)
dynamicarray = txtmeting(vakteller).Text
Next vakteller

------------------------------------------------------------

Ik heb dus 29 textboxen in array vorm (txtmeting(0) t/m txtmeting(29) met als inhoud getallen (singles) ) en hier wil ik de data van opslaan in dynamicarray .

De foutmelding is : Can't assign to array

waarom krijg ik mijn dynamic array niet aan de praat?

There are 10 types of people in this world, those who understand binary and those who don't


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat dacht je van:

code:
1
dynamicarray(vakteller) = txtmeting(vakteller).Text


:Y)

En moet je je array niet eerst effe (re)-dimmen op de juiste grootte? Je Dimt je array wel, maar geeft er geen grootte aan. Dan kun je er dus niks in stoppen.

code:
1
Dim myArray(1000) as integer

maar dat is geen dynamische array, maar een statische. Gebruik:
code:
1
2
3
4
5
Dim myArray() as integer
Dim maxSize as long

maxSize = 1000
Redim myArray(maxSize)

...voor de dynamische versie.

En als ik dan toch "les" geef in arrays: kijk bij ReDim ook eens effe naar het Preserve keyword (hoewel 't technisch een beetje ranzig is, soms wel handig)

[ Voor 65% gewijzigd door RobIII op 17-09-2004 01:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

En dat is ook zo'n beetje alles wat er over te zeggen valt :)

Nog wel aardig om toe te voegen, is de Array functie (vb6 heeft die, vb5 niet)

code:
1
dynamicarray = Array(txtmaten(0), txtmaten(1), txtmaten(2), ..., ..., ...)
You get the point.
Niet zo mooi, maar soms wel ff handig.
Ik denk niet dat je er nu wat aan hebt (de tip van RobIII is beter bruikbaar), maar het is niet onaardig om daar even op gewezen te worden.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • chrisstructor
  • Registratie: Juni 2001
  • Laatst online: 01-02-2020

chrisstructor

Employ your more evil being

Topicstarter
Hartstikke bedankt Rob (en MUBA) ;)
zit nu al een aantal dagen nonstop met dit programma te werken en zie soms door de bomen effe het bos niet meer :)
Ben er inderdaad uit nu :)
Maakte ook nog de trieste fout met het printen van de array :) (voor controle van de werking)

picture1.print = dynamicarray(vakteller)

in plaats van :

for vakteller = 1 to (aantal -1)
picture1.print = dynamicarray(vakteller)
next vakteller

En dan heb je het idee dat je array niet werkt he..... 8)7 O+

Zit nog wel met 1 vraag :
Ik heb dit stukje data :

For vakteller = 0 To (aantal - 1)
If txtmeting(vakteller).BackColor = RGB(255, 255, 255) Then
dynamicarray(vakteller) = txtmeting(vakteller).Text
Elseif txtmeting(vakteller).BackColor = RGB(255, 0, 0) Then
goto (regel : next-teller)
End If
Next vakteller

Hier wil ik mee bereiken dat de waarde van de textvakken met een rode achtergrond niet worden meegenomen in de dynamic array.
Laat ik het elseif/then gedeelte weg, dan schrijft ie op die plek een nul in de array, wat ik niet wil.

En goto is een NO GO !
Is het mogelijk het goto gedeelte met een loopje te vervangen, zodat de arraywaarde van 'vakteller + 1' op de plek van 'vakteller' komt en zo verder, om te voorkomen dat de array even lang blijft en op de niet meegenomen vaktellers een 0 nulwaarde neerzet ?

[ Voor 108% gewijzigd door chrisstructor op 17-09-2004 12:35 ]

There are 10 types of people in this world, those who understand binary and those who don't


Verwijderd

Voor het laatste (rode vakken) moet je de teller op je totale hoeveelheid van vakken loskoppelen van de index op je dynamic array:

code:
1
2
3
4
5
6
7
long lngDynaTeller = 0
For vakteller = 0 To (aantal - 1)
    If txtmeting(vakteller).BackColor = RGB(255, 255, 255) Then
        dynamicarray(vakteller) = txtmeting(vakteller).Text
        lngDynaTeller = lngDynaTeller +1
    End If
Next vakteller


Ander puntje: welke VB(A) heb je hier ? In bv VB 6.0 kan je collecties van widgets maken.

Edit: zoek de bug !

[ Voor 7% gewijzigd door Verwijderd op 17-09-2004 13:20 ]


  • chrisstructor
  • Registratie: Juni 2001
  • Laatst online: 01-02-2020

chrisstructor

Employ your more evil being

Topicstarter
ik heb hier vb 6.0 , maar nog niet van widgets gehoord ;)
en thanks
zal proberen het zo aan de praat te krijgen :)

hmmm bovenstaande lost het probleem niet op.
in de array blijf ik de waarde 0 terugvinden voor de rode (niet meetellende) vakken

[ Voor 37% gewijzigd door chrisstructor op 17-09-2004 13:00 ]

There are 10 types of people in this world, those who understand binary and those who don't


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
chrisstructor schreef op 17 september 2004 @ 12:54:
ik heb hier vb 6.0 , maar nog niet van widgets gehoord ;)
en thanks
zal proberen het zo aan de praat te krijgen :)

hmmm bovenstaande lost het probleem niet op.
in de array blijf ik de waarde 0 terugvinden voor de rode (niet meetellende) vakken
Gebruik ten eerste eens effe code-tags, dat leest een stuk prettiger.
Verder snap ik je bedoeling niet helemaal wat betreft dat gebeuren met die rode achtegrond-textboxes... Wat wil je daar nu precies mee doen? Je dynamic array vullen met alle textboxes, behalve de rode? En als ze rood zijn, moet er dan een "gap" in je array komen, of wordt de volgende "non-rode" texbox-waarde gewoon in de array gepoft?

Probeer iets duidelijker te zijn a.u.b.

Overigens, als ik je code wat beter bekijk:
code:
1
2
3
4
5
6
7
For vakteller = 0 To (aantal - 1)
  If txtmeting(vakteller).BackColor = RGB(255, 255, 255) Then
    dynamicarray(vakteller) = txtmeting(vakteller).Text
  Elseif txtmeting(vakteller).BackColor = RGB(255, 0, 0) Then
    goto (regel : next-teller)
  End If
Next vakteller


ik denk dat ik nu begrijp wat je wil... Momentje:

code:
1
2
3
4
5
6
7
8
Dim lIndex as long
lIndex = 0
For vakteller = 0 To (aantal - 1)
  If txtmeting(vakteller).BackColor = RGB(255, 255, 255) Then
    dynamicarray(lIndex) = txtmeting(vakteller).Text
    lIndex = lIndex + 1
  End If
Next vakteller

Zoiets?

En als laatste opmerking: Het is niet de bedoeling dat we, vooral dit soort relatief "basic" vragen, voor je gaan voorkauwen. Debug je code eens (zet een breakpoint of een watch) en gebruik je hoofd gewoon om uit je probleem te komen. Dit is toch redelijk "beginnerswerk" en hier @P&W hebben we toch liever de wat "uitdagender" vraagjes ;)

@bloog hieronder: Regel 1 zal niet compileren lijkt me :Y)

[ Voor 62% gewijzigd door RobIII op 17-09-2004 13:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Zat een fout in mijn code, de nieuwe teller moet natuurlijk wel worden gebruikt:
code:
1
2
3
4
5
6
7
long lngDynaTeller = 0
For vakteller = 0 To (aantal - 1)
    If txtmeting(vakteller).BackColor = RGB(255, 255, 255) Then
        dynamicarray(lngDynaTeller) = txtmeting(vakteller).Text
        lngDynaTeller = lngDynaTeller +1
    End If
Next vakteller

  • chrisstructor
  • Registratie: Juni 2001
  • Laatst online: 01-02-2020

chrisstructor

Employ your more evil being

Topicstarter
simpel doch geniaal ;)
sorry voor de basic stuff, maar ben hard op weg verder als basic te komen ;)

There are 10 types of people in this world, those who understand binary and those who don't

Pagina: 1