Toon posts:

[VB6] Probleem met array en picturebox

Pagina: 1
Acties:

Verwijderd

Topicstarter
Aloha,

Ik ben bezig voor school met een kaartspel dat gemaakt moet worden in VB6. De code waar het om gaat is dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Command1_Click()

   Dim cnt As Long
   Dim myArray(1 To 32) As Long
   Dim intpic As Integer
   


   For cnt = 1 To 32
      myArray(cnt) = cnt

   Next
   
   RandomizeArray myArray
   
 
   For cnt = 1 To 32
         cnt2 = cnt + 32
         Picture(cnt2).Picture = Picture(myArray(cnt)).Picture
        
Next

End Sub

Bovenstaande werkt dus niet. |:(

Als ik de code
code:
1
 Picture33.picture = Picture3.picture

gebruik dan wordt het plaatje uit picturebox 3 gekopieerd naar picturebox 33.
Dus het principe klopt alleen de code niet.

( Heb trouwens hetzelfde staan bij Softe Goederen, die kan dus weg verkeerde topic)

[ Voor 1% gewijzigd door Verwijderd op 14-10-2005 13:32 . Reden: klein foutje in de code cnt = 33 to 64 moest zijn 1 to 32 ]


Verwijderd

dus plaatjes 33 tem 64 zijn dezelfde als 1 tem 32, maar in random volgorde. moet je niet gewoon for cnt=1 to 32 doen in je lus?

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

Lorn

I have a bad feeling...

Het kan nooit werken daar je myArray de indexes 1 tot en met 32 kent en de variabele cnt krijgt in de For...Next lus als eerste de waarde 33. Item 33 bestaat niet in je array en dit zal inderdaad een mooie foutmelding opleveren (een foutmelding die je voor de volledigheid in je post erbij had moeten zetten).

Verwijderd

Topicstarter
my bad dat klopt, maar het probleem is dat ie de variabelen niet invult. Dus hij begrijpt Picture(myArray(cnt)).picture niet, het lijkt alsof hij aangeeft dat Picture een array is.

Verwijderd

Topicstarter
Hij geeft aan als foutmelding: Invalid Qualifier
Dit geeft ie aan bij Picture

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 14:06

ThunderNet

Flits!

Ah :)
Wat hij nu denkt is dat hij linkt naar een array van pictureboxen...
wat je moet doen is een picturebox aanmaken. en hier de index van aanzetten (staat bij de poperties)
Wat je dan kunt doen is een array aanmaken van pictureboxen.

Dan zou je code wel werken :)

Dus ipv Picture1, Picture2, Picture3 etc. krijg je Picture1(0), Picture1(1), Picture1(2) etc. :)

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Heb je al wel 64 pictureboxes op je form dan?

(Wel traag, je kunt beter een goed systeem aanleggen en dan BitBlt gebruiken, is 80x sneller. Maar ja, da's offtopic)

EDIT:

Ja, stom, ik zag niet dat je Picturebox33 gebruikte (ik las automatisch al Picturebox(33)), ik nam aan dat je al een control array had, zoals /\ al zei.

[ Voor 37% gewijzigd door CodeCaster op 14-10-2005 13:40 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


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

Lorn

I have a bad feeling...

Dat komt omdat de naam Picture erg ongelukkig is gekozen, je Form heeft al een Picture property. Als je nou je PictureBox hernoemt naar pbxCard oid dan zal het opzich werken (mits je niet buiten de arrays gaat).

Edit: zoals mijn voorgangers al aangaven, ook ik was er vanuit gegaan dat je een control array had gemaakt. Op de manier waarop je het nou probeert gaat het nooit werken. Ik zou trouwens als ik jou was zowieso overwegen om de array gewoon met index 0 te laten beginnen. Vrijwel alle arrays binnen VB beginnen met index 0.

[ Voor 47% gewijzigd door Lorn op 14-10-2005 13:45 ]


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Command1_Click()

   Dim cnt As Long
   Dim myArray(0 To 31) As Long
   Dim cnt2 As Long
   Dim pbxCard() As PictureBox
   Dim pbxCard2() As PictureBox
   Dim cnt3 As Long

   For cnt = 0 To 31
      myArray(cnt) = cnt

   Next
   
   RandomizeArray myArray
   
 
   For cnt = 0 To 31
         
         
         
         pbxCard(cnt).Picture = pbxCard2(cnt).Picture  *
   Next

End Sub


Dit heb ik aan gepast, maar nu geeft ie aan Subscript out of range dit geeft ie bij de lijn waar een * achter staat.

  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 14:06

ThunderNet

Flits!

dit klopt nog steeds :) aangezien je de array niet gevuld hebt...
probeer dit eens:

code:
1
2
   Dim pbxCard(31) As PictureBox
   Dim pbxCard2(31) As PictureBox

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Dat is de foutmelding die hoort bij een index die buiten je array valt.

Stel, je hebt een array met 3 items (0, 1 en 2) en je roept nummer 5 aan.

Dus, pbxKaart en pbxKaart2, bestaan die allebei met 32 indixes (0 - 31) ?

EDIT:

/spuit 11

Maar, kun je een geDimde picturebox op je form plaatsen?

[ Voor 16% gewijzigd door CodeCaster op 14-10-2005 15:27 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
Ik ben van die foutmelding af ik heb de array nu gevuld, maar nu hebben we een nieuwe:
Object variable or With block variable not set

De code die ik nu gebruik is dit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Command1_Click()

   Dim cnt As Long
   Dim myArray(0 To 31) As Long
 
   Dim pbxCard(31) As PictureBox
   Dim pbxCard2(31) As PictureBox


   For cnt = 0 To 31
      myArray(cnt) = cnt

   Next
   
   RandomizeArray myArray
   
 
   For cnt = 0 To 31
         
      
         
         pbxCard(cnt).Picture = pbxCard2(myArray(cnt)).Picture
         
   Next

End Sub


De array`s zijn gevuld. pbxCard2(4).picture is bijv een Harten10 plaatje die moet gekopieerd worden naar pbxCard(0).picture
Dit gaat dus niet goed.

[ Voor 70% gewijzigd door Verwijderd op 14-10-2005 15:36 . Reden: extra ]


Verwijderd

Verwijderd schreef op vrijdag 14 oktober 2005 @ 15:19:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Command1_Click()

   Dim cnt As Long
   Dim myArray(0 To 31) As Long
   Dim cnt2 As Long
   Dim pbxCard() As PictureBox
   Dim pbxCard2() As PictureBox
   Dim cnt3 As Long

   For cnt = 0 To 31
      myArray(cnt) = cnt

   Next
   
   RandomizeArray myArray
   
 
   For cnt = 0 To 31
         
         
         
         pbxCard(cnt).Picture = pbxCard2(cnt).Picture  *
   Next

End Sub


Dit heb ik aan gepast, maar nu geeft ie aan Subscript out of range dit geeft ie bij de lijn waar een * achter staat.
Denk eens na......wat zijn de dimensies van de arrays pbxcard en pbxcard2 ?

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Dat zeg ik.

Als je een picturebox dimt, heb je er nog geen een...

Je moet Load gebruiken.

Hiermee kun je een picturebox die op je form staat dupliceren.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Verwijderd schreef op vrijdag 14 oktober 2005 @ 15:27:
Ik ben van die foutmelding af ik heb de array nu gevuld, maar nu hebben we een nieuwe:
Object variable or With block variable not set

De code die ik nu gebruik is dit
code:
1
2
3
4
5
6
Private Sub Command1_Click()

   Dim pbxCard(31) As PictureBox
   Dim pbxCard2(31) As PictureBox

End Sub


(...) pbxCard2(4).picture is bijv een Harten10 plaatje
Wanneer zet je dat plaatje erin dan? In die sub? Of staan die er op je Form al in...?
Dan is het onzin om die hier te declareren.

Als de controls pbxCard2(0-31) al op je form staan...

Dan moet je die "Dim pbxCard2(31) As PictureBox " uit je Command1_Click code weghalen.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Command1_Click()

   Dim cnt As Long
   Dim myArray(0 To 31) As Long


  

   For cnt = 0 To 31
      myArray(cnt) = cnt

   Next
   
   RandomizeArray myArray
   
   For cnt = 0 To 31
 
         
pbxCard(cnt).Picture = pbxCard2(myArray(cnt)).Picture
         
   Next

End Sub


hij doet nu precies wat hij moet doen, hij zet nu alles netjes random neer.
Het lag aan die Dim pbxCard... toen ik die weghaalde werkte het.
Iedereen heel erg bedankt voor z`n reacties
Pagina: 1