Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Juu, picture komponenteista

Dafar [20.07.2003 20:18:38]

#

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

Antti Laaksonen [20.07.2003 23:43:55]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta