Tässä ois pieni koodin pätkä. Sen tarkoitus on ottaa 10 merkkiä pitkästä merkkijonosta 1 merkki kerrallaan tieto, jonka perusteella laitetaan kuva picture komponentteihin. Niin, että ekalla kierroksella Tile00:n, ja siitä eteenpäin Tile01,Tile02...Tile09. Miten tämän saa aikaan ilman, että if silmukka tarvitsee kirjoittaa uudelleen?
Private Sub CmdGenerate_Click() ' otetaan merkkijono talteen Line00$ = TxtLine00.Text ' siirrytään for silmukkaan For Monesko = 1 To 10 ' poimitaan merkkijonosta yksi merkki Valittu$ = Mid$(Line00$, Monesko, 1) ' katsotaan, mikä merkki on If Valittu$ = 0 Then FrmMain.Tile00.Picture = Storage.StrGrass01.Picture ElseIf Valittu$ = 1 Then FrmMain.Tile00.Picture = Storage.StrRoad01.Picture ElseIf Valittu$ = 2 Then FrmMain.Tile00.Picture = Storage.StrWater01.Picture Else End If ' alkuun Next Monesko End Sub
Varmaan olisi helpointa, jos hieman muuttaisit PictureBoxien nimeämistä. Muuta Tile00 - Tile09 -kontrollien nimeksi Tile, mutta laita niille eriävät Index-arvot:
Tile00 -> Tile(0) (Name = Tile, Index = 0)
Tile01 -> Tile(1) (Name = Tile, Index = 1)
Tile02 -> Tile(2) (Name = Tile, Index = 2)
.
.
.
Tile09 -> Tile(9) (Name = Tile, Index = 9)
Nyt kontrolleja pystyy käsittelemään vähän kuin taulukkoa:
FrmMain.Tile(Monesko - 1).Picture = Storage.StrGrass01.Picture
Sama menettely voisi sopia myös noihin Storage-formin kuviin:
StrGrass01 -> StrObject(0)
StrRoad01 -> StrObject(1)
StrWater01 -> StrObject(2)
jne.
Tämän jälkeen For-silmukka lyhenisi merkittävästi:
For Monesko = 1 To 10 Valittu$ = Mid$(Line00$, Monesko, 1) FrmMain.Tile(Monesko - 1).Picture = Storage.StrObject(Val(Valittu$)).Picture Next Monesko
Aihe on jo aika vanha, joten et voi enää vastata siihen.