Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Välilehtien käyttö VB

Sivun loppuun

Dareon [27.02.2005 15:57:38]

#

Olen tekemässä toolkittia erääseen peliin ja haluaisin tietää vähän välilehtien toiminnasta, olen saanut jonkin näköisen häkkyrän kyhättyä. Miten olisi mahdollista saada välilehtiä painelemalla erilaisia asioita tulostettua juuri sille välilehdelle. Olen täydellinen aloittelija VB:n kanssa, mutta pitäähän sitä jostain aloittaa. Kiitos jo etukäteen.

Seuraavan laista koodia olen jo koittanut:

Private Sub TabStrip1_Click()
Dim intVälilehti As Integer
intVälilehti = TabStrip1.SelectedItem.Index
Select Case intVälilehti
Case 1
Form2.Show
Case 2
Form3.Show
End Select
End Sub

Niinkuin varmaasti huomaatte, niin tuo avaa aina uuden välilehden tilalle, miten olisi mahdollista korvata vanha välilehti uudella, niin että päällä olisi yhtä aikaa vain 1 välilehti.

Puhveli [27.02.2005 17:09:20]

#

En tiedä miten hyvin vepukkaa osaat joten selitän kuin pienelle lapselle kaiken varmuuden vuoksi. Elä pahastu, jookos.

Joo elikkäs tuo formien käyttäminen ei ole hyvä idea, koska formi on aina uusi ikkuna. Parempi idea on käyttää PictureBoxia tai Framea, joka toimii ns. ControlContainerina, eli sen sisälle voi sijoittaa muita objekteja.

Paina Ctrl+T (components) ja sieltä valitset Microsoft Windows Common Controls 5.0 tai 6.0. Siellä on muun muassa TabStrip-kontrolli, jonka heität formille. Voit Customize...:n avulla muokata välilehtiä. Sitten heitä formille PictureBoxeja, joiden BorderStyleksi laitat 0 ja Visibleksi false. Kopioi samaa PictureBoxia, ja kun kysytään että haluatko tehdä siitä Control-Arrayn niin valitse Yes. Huolehdi, etteivät boxit mene toistensa sisälle. Sitten teet seuraavan koodin joko uuteen Timerin tai TabStrip1_Click-subiin:

dim i as integer, a as boolean 'ei pakollinen mutta kuuluu hyviin tapoihin
for i = 0 to tabstrip1.tabs.count - 1
    if tabstrip1.selecteditem.index = i + 1 then a = true else a = false
    picturebox1(i).visible = a
next

Valittu välilehti on TabStrip1.SelectedItem.Index. Ensimmäisen Tabin Index = 1, kun Controlarrayssa olevan objektin yleensä 0, siksi tuo i + 1 on tuolla.
Tämä on siis vain yksi tapa, jota minä itse käytän. Jos sulla on vb:n mukana tulleita templateformeja, tee uusi formi ja valitse Add Form-ikkunasta 'Options Dialog'-niminen template, jossa on toinen (ja ilmeisesti validinpi) esimerkki Tabien käytöstä. Siinä pictureboxeja, joiden visible on minulla false, liikutetaan vasemmalle, joka on sinänsä huono idea koska niiden sisällä oleviin objekteihin pääsee silti käsiksi run-timessä, vaikka niiden pitäisi olla piilossa. edit: tulipahan taas kirjotettua novelli :)

Dareon [01.03.2005 18:21:00]

#

Anteeksi, mutta en oikein ymmärtänyt tätä. Olen todellakin täydellinen aloittelija, enkä pistä pahakseni, vaikka seikka mainitaankin. Siis tarkalleenottaen mihin tarkoitit, että picture boxeja laitetaan ja miksi minulla ei tule mitään controlarray juttua :)

Kiitos jo etukäteen,
Dareon.

Meitsi [01.03.2005 18:26:41]

#

Picture boksien paikalla ei ole väliä kunhan laitat ne koodissa samaan paikkaan. COntrolArray tulee kun copy-pasteat jonkin kontrollin (tässä tapauksessa picturebox).

Dareon [01.03.2005 18:50:40]

#

Minulla on itselläni käytössä visual basic 6 professional. Kun painan picture boxia ja ctrl+c ja sitten ctrl+v niin se ilmoittaa, että sen niminen picture box on jo olemassa. Sitten ovat vaihtoehdot kyllä ja ei. Toinen asia on tuo picture box homma... siis pistän niitä sikinsokin yhdelle formille vai? Vai päällekkäin vai miten? Tarkoitus olisi avata kustakin välilehdestä sen alapuolelle olevalle tyhjälle alueelle erilaisia asioita. Hmmm... taisi tulla vähän liiankin selkeä selitys, mutta kuitenkin. Olen väsynyt, joten en kunolla ymmärrä edes yksinkertaisia asioita, mutta jos joku osaisi selittää, niinkuin kolmevuotiaalle, niin se olisi hyvä. =)

Kiitos,
Dareon.

tuomas [01.03.2005 19:31:20]

#

Kun kopiot sen pictureboksin ja painat sen ctrl + v niin, vastatessasi kyllä, kopioidulle ja uudelle kontrollille luodaan indeksit (esim. picture1 -> picture1(0) ja uudesta kontrollista tulee picture1(1) jne) ja vastatessa ei, luodaan vain uusi kontrolli eri nimellä (numero suurenee).

Kontrollien index ominaisuudesta on hyötyä kun tarvitsee tarkistaa monen kontrollin tietoja. Esim:

for i = 1 to 3
    if picture1(i).scalemode = 1 then
       'blaaa
    end if
next

kuin jos taas indeksejä ei olisi:

if picture1.scalemode = 1 then blaa_blaa
if picture2.scalemode = 1 then blaa_blaa
jne.

Puhveli [01.03.2005 20:05:37]

#

Meitsi kirjoitti:

Picture boksien paikalla ei ole väliä.

Meitsi: On niillä sinänsä että jos ne menee sisäkkäin ja alimmaisen Visible on False, niin muutkaan eivät näy. Selitin turhan epäselvästi kyllä tiedän joo..
Dareon: Ole kiltti ja kirjoita profiilisi tietoihin ikäsi ja aiempi ohjelmointikokemuksesi, siitä on apua kun yrittää kirjoittaa vastausta tekemääsi kysymykseen. Kopioi boxit niin, ettei muut boxit liiku kun liikutat jotain muuta, silloin ne eivät ole sisäkkäin.
hmm... Mikäköhän dekoraatiovillitys minullekin on tullut :)

BadSource [02.03.2005 07:26:59]

#

Tuossa on aikaisempi esimerkki, jossa olen hieman testaillut SSTab:n ja TabStrip:n eroja. SSTab:a on helpompi käyttää ja sillä pääsee nopeasti alkuun, mutta myöhemmin havaitsin, että siinä on jokin ongelma (jota en nyt tähän hätään muista), minkä takia jouduin vaihtamaan TabSrip:in (...tumaista suuren projektin kanssa).

Meitsi [03.03.2005 09:35:23]

#

Laitat formille jonnekkin näkymättömiin pictureboksit joihin laitat kontrollit. Sitten kun formi avataan laitat kaikki pictureboksit samaan kohtaan tabin päälle ja laitat ensimmäisen picboksin näkyville => muut piiloon. Kun tabeja vaihdetaan, näytät ja piilotat picbokseja tabin mukaan...

Dareon [05.03.2005 18:06:45]

#

Saan jostain syystä jatkuvasti virheen "runtime error: type mismatch." Muuten toimii hienosti :\ Tietääköhän kukaan mistä tämä johtuu ja miten voisin korjata ongelman? Lisäksi, mitenköhän olisi mahdollista avata web-sivu, johonkin kohtaan sovellusta?

Antti Laaksonen [05.03.2005 18:34:37]

#

Mikä rivi näkyy merkittynä tuon virheen tullessa? Suomeksi virhe tarkoittaa väärää muuttujatyyppiä.

Helpoiten web-sivun saa auki valmiin kontrollin avulla (esim. WebBrowser, joka tulee näkyviin merkitsemällä Project->Components-ikkunassa Microsoft Internet Controls).

Dareon [05.03.2005 19:58:54]

#

Rivi

if picture1(i).scalemode = 1 then

tuosta yllämainitusta koodista.

tuomas [05.03.2005 20:05:02]

#

Avataksesi web sivun, sinun täytyy joko tehdä oma html- tulkki tai voit käyttää sitä kontrollia (IE).. umm.. en muista nimeä :( No joku internet browser tms nimellä ..

Dareon [05.03.2005 20:25:04]

#

Poistin osoitteen, koska jostain syystä sekään ei toiminut. :(

tuomas [05.03.2005 20:28:43]

#

onhan sillä picture1 objektilla varmasti indeksi?

Dareon [05.03.2005 20:31:30]

#

Ööhh... eli? :)

EDIT: Mitäköhän mahdat tarkoittaa? :)

tuomas [05.03.2005 20:36:11]

#

Tais löytyy ongelma :D
Sieltä sen objektin ominaisuudet ikkunasta pistät index = 0.

Dareon [05.03.2005 20:42:23]

#

Noniin, nyt rupesi pienen seikkailun jälkeen toimimaan. Kiitoksia kaikille! Miten sitten lisään objekteja picture boxeihin? :)

tuomas [05.03.2005 20:59:44]

#

Kuvan lataus picture lootaan tapahtuu näin:

picture1.picture = loadpicture(App.Path & "\kuva.bmp")
'formaatit jotka voi ladata: .bmp, .jpg, .gif, .png, muita en muista :(
vaihda tuossa pätkässä sitten se indeksi viittaamaan oikeaan kontrolliin.

Dareon [05.03.2005 21:04:52]

#

Entäpäs kaikki muu ;)
Tekstit, Lausekkeet, Funktiot jne.

Vai olisiko sittenkin pitänyt käyttää framea? :(

tuomas [05.03.2005 21:24:31]

#

No se picture loota on tarkoitettu kuvia varten. Ei muuta.

Dareon [05.03.2005 21:40:40]

#

Tein tuon saman frameilla, miten niihin sitten saa lisättyä muuta, kuin kuvia?


Sivun alkuun

Vastaus

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

Tietoa sivustosta