Neljä vuotta on kulunut siitä kun viimeksi Visual Basicia käytin, silloin oli versio 6.0 ja nyt se on .NET 2008 eikä aikaakaan kun ongelmia alkoi kasaantua. Olio-ohjelmointi sinänsä on tuttua C++:aa ja Javaa käyttäneenä, mutta VB:n kanssa ei minulla oikein ajatukset synkronoidu. Olen luomassa peliä, jonka pitäisi toimia kuin siinä ei oikeasti ikkunat edes vaihtuisi. Niinpä ajattelin luoda MDI Parent -ikkunan, johon tulisi sitten vaihtuvia lapsi-ikkunoita. Siitähän kehittyi jo sellainen probleema, että kuinka saan valtavan määrän pelidataa jotenkin järkevästi kaikkien formien saataville. Luokan pystyn kyllä luomaan mutta kun niitä ei pysty määrittelemään julkisiksi, joudunko joka kerta siirtämään oliot formilta toiselle jollain vippaskonstilla?
MDI-ideassa kusee myös se, että tästä VB:stä ei nähtävästi enää löydy formille ominaisuutta MDI Child vai mikä se onkaan ennen ollut. Eli aika vaikeaa lisätä lapsia sille MDI formille.
Tumpelo kirjoitti:
Olen luomassa peliä, jonka pitäisi toimia kuin siinä ei oikeasti ikkunat edes vaihtuisi.
Miksi sitten tekisit useita ikkunoita, jos niiden ei pidä näyttää useilta ikkunoilta? Tee niistä vaikka user controleita ja lätki ne samaan ikkunaan.
Tumpelo kirjoitti:
Luokan pystyn kyllä luomaan mutta kun niitä ei pysty määrittelemään julkisiksi, joudunko joka kerta siirtämään oliot formilta toiselle jollain vippaskonstilla?
a) miksi niitä ei voi määritellä julkisiksi
b) jos Public ei käy, niin entäs Friend ?
Tumpelo kirjoitti:
MDI-ideassa kusee myös se, että tästä VB:stä ei nähtävästi enää löydy formille ominaisuutta MDI Child vai mikä se onkaan ennen ollut. Eli aika vaikeaa lisätä lapsia sille MDI formille.
Ei se niin hirveän vaikeaa ole. Idea on se, että kun MDI Containerissa avaat lapsi-ikkunan, niin kerrot sille, mihin MDI Containeriin haluat sen näkymään.
Googlella löysin hakusanoilla mdi vb.net esimerkiksi seuraavan kooodin
Dim childForm As Integer = 0 Dim childForms(5) As Form2 'declaring an array to store child windows 'five child windows (Form2) will be displayed Private Sub MenuItem2_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MenuItem2.Click childForm += 1 childForms(childForm) = New Form2() childForms(childForm).Text = "ChildForm" & Str(childForm) 'setting title for child windows and incrementing the number with an array childForms(childForm).MdiParent = Me childForms(childForm).Show() End Sub
Grez kirjoitti:
Miksi sitten tekisit useita ikkunoita, jos niiden ei pidä näyttää useilta ikkunoilta? Tee niistä vaikka user controleita ja lätki ne samaan ikkunaan.
No, oletetaan että lätkin vaikka 30 user controlia päällekäin (ei muuten toolbox listasta moisia löytynyt), kuinka oikein niitä hallitsen?
Grez kirjoitti:
a) miksi niitä ei voi määritellä julkisiksi
Voi luokan/formin sisällä, ei niin että ne olisivat julkisia joka formille. En ainakaan minä onnistu laittamaan public shared muuttujaa muualle kuin luokan sisälle. Eikä sitä muuttujaa muiden luokkien sisältä voinut käsitellä.
Tumpelo kirjoitti:
No, oletetaan että lätkin vaikka 30 user controlia päällekäin (ei muuten toolbox listasta moisia löytynyt), kuinka oikein niitä hallitsen?
Zorder tai Visible tulisi mieleen. Myös sijainti teoriassa mahdollinen. Kun olet tehnyt user controlin, saat sen toolboxiin kuten muutkin controllit mitä siellä on vakiona.
Tumpelo kirjoitti:
En ainakaan minä onnistu laittamaan public shared muuttujaa muualle kuin luokan sisälle. Eikä sitä muuttujaa muiden luokkien sisältä voinut käsitellä.
Kyllä nyt public muuttujia voi käsitellä luokkien sisältä muistakin luokista. Eihän siinä publicissa muuten mitään ideaa olisi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.