Etusivu Aloitus Kontrollit Metodit Muuttujat Ohjausrakenteet Silmukat Matematiikka Debuggaus Virheenkäsittely Vuorovaikutus Valikot Tiedostonkäsittely Ikkunat Leikepöytä Drag and Drop Tiedostopäätteet Linkkejä Harjoitukset

Johdanto ja tavoite

Tässä osiossa tutustutaan Visual Basic:in valikoihin. Tämän osion jälkeen opiskelija osaa käyttää valikoita monipuolisesti hyväkseen omissa ohjelmissaan.

Valikko

Mikäs se valikko sitten oikein on? Lähes jokaisen ohjelman (oli graafinen tai ei) yläreunassa on jonkinlainen valikkorakennelma. Olemme tottuneet siihen, että yleisimmät (joskus jopa lähes kaikki) ominaisuudet löytyvät valikoista). Alla olevassa kuvassa on esitelty VB:n valikot:

Visual Basic:n valikot

Valikoissa on aina ns. päävalikko, eli esimerkkikuvassamme kaikki näkyvät valikot ovat päävalikoita joista avautuu ns. alivalikoita. Alivalikoilla voi taasen olla omia alivalikoitaan jne. Seuraavassa kuvassa on esitelty päävalikko Format, sen alivalikko Make Same Size ja sen alivalikko Both.

Alivalikot

Valikoihin pääsee "käsiksi" joko napsauttelemalla niitä hiirellä tai käyttämällä näppäimistöä. Jos haluat aktivoida valikkorivin ilman hiirtä, napsauta Alt -näppäintä.

Alt -näppäimellä aktivoituva valikko

Kuten huomasit (kuvasta korostusta on ehkä hieman hankala nähdä), File -valikko on Alt -napin painalluksen jälkeen aktiivinen. Voit liikuttaa kohdistusta nuolinäppäimillä (oikealle ja vasemmalle), valikko avautuu Enter tai nuoli alas -näppäimellä. Valikko sulkeutuu Esc -näppäimellä. Tämän lisäksi huomasit ehkä, että Alt -näppäimen painalluksen jälkeen voit avata haluamasi valikon painamalla em. valikossa alleviivattuna olevaa kirjainta. Jos haluat avata Diagram -valikon, paina ensin Alt -näppäintä aktivoidaksesi valikon ja sen jälkeen i -kirjainta avataksesi em. valikon. Tämän lisäksi valikolla voi olla vielä ns. pikanäppäin, esim. File -valikon Exit -toiminnolla on pikanäppäin Alt-Q. Ja huomasithan, että jotkut valikot eivät välttämättä ole aktiivisia (eli niitä ei voi valita).

Ns. normaalivalikoiden lisäksi on olemassa ns. pika -valikoita, jotka avautuvat esim. tietyn kontrollin päältä hiiren oikeaa nappia napsautettaessa. Kokeile napsauttaa hiiren oikeaa painiketta esim. lomakkeella olevan painikkeen päällä (suunnittelutilassa), seuraavanlainen pikavalikko tulisi avautua:

Pikavalikko

Nyt siis tiedämme millä eri tavoin valikoita voi käyttää. Seuraavaksi opettelemme luomaan valikoita.

Valikoiden luominen

Valikoita luodaan ns. Menu Editor -ikkunassa. Voit avata em. ikkunan joko napsauttamalla hiiren oikeaa painiketta lomakkeen päällä tai valitsemalla Tools -valikosta Menu Editor -toiminnon. Seuraavanlainen ikkuna tulisi avautua:

Menu Editor

Tätä ikkunaa käyttäen voit lisätä ns. staattisia valikoita, eli valikoita jotka luodaan ennen ohjelman suorittamista. Toki voit luoda paljon valikoita ja piilottaa niistä osan ja näyttää tarpeen mukaan jolloin käyttäjälle tulee tunne, että valikoita "luodaan lennossa". Valikoita voi luoda lennosta tarpeen mukaan, tämä onnistuu siten, että luodaan yksi staattinen valikko ja annetaan sille indeksinumero. Tämän jälkeen voimme ohjelmakoodissa ladata em. valikosta uusia valikkoilmentymiä.

Nyt opettelemme kuitenkin tekemään ensin perusvalikon. Kuten johdannosta muistatkin, valikoita on usean tasoisia. Teemme nyt ns. päätason valikot. Kirjoita Caption -kohtaan teksti Tiedosto. Tämä on valikkosi nimi, joka näkyy käyttäjälle. Seuraavaan kohtaan voit kirjoittaa mnuTiedosto joka on valikon nimi, jota käytetään ohjelmakoodista. Napsauta Next -painiketta - valikko on luotu ja olemma valmiit luomaan seuraavan valikon. Tee samat toimenpiteet, nimiksi "Ohjelmasta" ja "mnuOhjelmasta" ja napsauta OK -painiketta. Alla kuva valmiista valikoista ja ohjelmasta OK -painikkeen napsautuksen jälkeen.

Valikoiden tekoa

Olemme luoneet nyt siis päätason valikot. Kuinka tehdään ns. alivalikoita? Avaa Menu Editor jälleen kerran ja valitse (eli napsauta hiiren vasemmalla painikkeella) Ohjelmasta -valikkoa. Tämän jälkeen voit napsauttaa Insert -painiketta. Kuten ehkä huomasit, ohjelma loi tyhjän kohdan Tiedosto ja Ohjelmasta -valikoiden väliin. Kirjoita nyt teksteiksi "Sulje" ja "cmdSulje". Napsauta OK ja sulje Menu Editor. Huomaatko ongelman? Sulje -valikko jonka pitäisi olla alavalikko onkin nyt päävalikko! Avaa Menu Editor jälleen kerran ja valitse Sulje -valikko. Voit sisentää valikkoa eli laittaa sen alivalikoksi napsauttamalla nuoli oikealle painiketta. Nyt voit sulkea Menu Editor:in.

Valikoiden käyttäminen

Meillä on nyt hieno ohjelma jossa on valikoita mutta mitään ei tapahdu vaikka klikkailemme valikoita. Voit lisätä suoritettavaa ohjelmakoodia kunkin valikon alle valitsemalla valikon suunnittelutilassa ja kirjoittamalla halutun ohjelmakoodin Click -tapahtumaan. Huomaa, että päävalikoille ei kannata kirjoittaa ohjelmakoodia kuin erityistapauksessa! Alla olevassa esimerkissä olemme lisänneet ohjelmakoodin jokaiseen valikkoon (jopa päävalikoihinkin):
Private Sub mnuOhjelmasta_Click()
    MsgBox "Napsautit Ohjelmasta -valikkoa"
End Sub

Private Sub mnuSulje_Click()
    Unload Me
End Sub

Private Sub mnuTiedosto_Click()
    Me.Caption = "Napsautit Tiedosto -valikkoa"
End Sub
Mitä em. ohjelmakoodi sitten tekee? Jos käyttäjä napsauttaa Ohjelmasta -valikkoa (päävalikko!), näytetään viestilaatikko joka kertoo, että käyttäjä oli napsauttanut Ohjelmasta -valikkoa. Näin voi tehdä, jos em. päävalikolla ei ole alivalikoita. Sulje -valikon ohjelmakoodi pyytää ohjelmaa sulkeutumaan (Unload Me). Tiedosto -valikkoa napsautettaessa vaihdetaan ohjelman otsikoksi teksti "Napsautit Tiedosto -valikkoa".

Pikavalikko

Pikavalikko ei eroa ns. normaalivalikoista luonnissa mitenkään. Voit käyttää pikavalikkona joko aikaisemmin luotua valikkoa tai tehdä ihan oman valikon pikavalikkoa varten. Erot alkavat pikavalikon näyttämisessä. Pikavalikkoa ei näytetä automaattisesti vaan siihen on oma komentonsa (PopUpMenu). Toisekseen, pikavalikolla tulee olla päävalikko mutta sitä ei näytetä!

Esimerkin vuoksi luomme nyt uuden päävalikon ja sen alle alivalikoita. Avaa Menu Editor ja luo Ohjelmasta -valikon (viimeisin valikko) jälkeen uusi päätason valikko (eli ei ollenkaan sisennystä) nimeltä "Poppari" ja "mnuPoppari". Tämän jälkeen luo kaksi alivalikkoa, "Tietoa ohjelmasta", "mnuPikavalikkoTietoaOhjelmasta" ja "Sulje", "mnuPikavalikkoSulje". Tuloksena seuraavanlainen valikkorakennelma:

Valikkorakennelma

Huom! Muista laittaa Poppari -valikon (eli tulevan pikavalikon Visible -ominaisuus False -asentoon, muutoin pikavalikko näkyy päävalikossa ylhäällä mikä ei ole tarkoitus). Kun suljet Menu Editor:n, näyttää siltä, että yhtään uutta valikkoa ei ole tehty.

Seuraavaksi lisäämme lomakkeelle yhden painikkeen ja kirjoitamme vähän ohjelmakoodia. Kuten jo aikaisemmin oli puhetta, pikavalikko voi olla jokin nykyisistä, jo näkyvistä valikoista tai sitten oma, erikseen tehty valikko. Kirjoitetaan siis ohjelmakoodi, joka näyttää Tiedosto -valikon pikavalikkona kun hiiren painiketta painetaan painikkeen päällä (ihan sama kumpaa painiketta):

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    PopupMenu mnuTiedosto
End Sub
Huomaa tapahtuma, johon ohjelmakoodi on kirjoitettu. Yleinen tapa näyttää pikavalikko on sijoittaa se MouseDown -tapahtumaan, eli pikavalikko tuodaan esiin kun hiiren (vasen) painike on painettu alas (mutta ei päästetty ylös). Itse pikavalikko näytetään kutsumalla PopupMenu -metodia ja antamalla parametriksi näytettävä (päätason) valikko. Seuraavassa kuvassa olemme painaneet hiiren vasemman painikkeen alas ja valikko avautuu:

Pikavalikko 1

Jos valitsemme Sulje -toiminnon, suoritamme silloin Sulje -valikkoon liittyvän ohjelmakoodin eli suljemme ohjelman. Kuten huomasit, sama valikko löytyy nyt siis päävalikosta tai pikavalikosta!

Joskus on tarpeen esittää pikavalikko joka ei koostu jo näkyvistä valikoista. Lisätään ensin hiukan ohjelmakoodia pikavalikoihin:

Private Sub mnuPikavalikkoSulje_Click()
    ' Kutsu mnuSulje -valikon Click -tapahtumaa
    mnuSulje_Click
End Sub

Private Sub mnuPikavalikkoTietoaOhjelmasta_Click()
    MsgBox "Hieno ohjelma (c) Teppo Testaaja", vbInformation
End Sub
Käydään lyhyesti läpi mitä em. ohjelmakoodit tekevät. Jos käyttäjä valitsee pikavalikosta Sulje -toiminnon (Huom! Tämä on eri Sulje -valikko kuin päävalikossa ja ensimmäisessä pikavalikossa näkyvä Sulje -toiminto), kutsutaan mnuSulje_Click -aliohjelmaa jossa on Unload Me -komento joka sulkee ohjelman. Jos käyttäjä valitse Tietoa ohjelmasta -valikkokohdan, näytetään viestilaatikko.

Seuraavaksi meidän täytyy kirjoittaa ohjelmakoodi, joka näyttää pikavalikon. Nyt valitsemme pikavalikon näyttöpaikaksi lomakkeen ja vieläpä siten, että käyttäjän tulee painaa hiiren oikea -painike alas saadakseen pikavalikon esille:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    ' Onko painettu hiiren oikeaa painiketta?
    If Button = 2 Then
        PopupMenu mnuPoppari
    End If

End Sub
Sijoitamme ohjelmakoodimme lomakkeen MouseDown -tapahtumaan kuten painikkeenkin kanssa mutta nyt tutkimme, kumpi hiiren painike on alhaalla. Vasen painike on 1, oikea 2 eli jos käyttäjä on napsauttanut painiketta 2, näytetään pikavalikko.

Esimerkkiohjelma: valikkoesimerkki.frm

Huom! Voit piilottaa ja ottaa väliaikaisesti pois käytöstä valikoita käyttämällä valikon Visible ja Enable -ominaisuuksia.

Tehtävä 21