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 tehdään pieniä teoriaan liittyviä harjoituksia. Tämän osion jälkeen opiskelija osaa käyttää Visual Basic -käyttöliittymää ja luoda pieniä sovelluksia. Kurssin päätteeksi käytämme kaiken oppimamme tiedon ja luomme yhden isomman ohjelman (esim. kuva-albumigeneraattori).

Harjoitukset

Alla on esitelty eri harjoitukset harjoituksen nimen mukaan. Harjoitukset ovat siinä järjestyksessä kuin teoriakin on esitetty. Kannattaa aina lukea ensin teoriaosuus ja suorittaa sen jälkeen varsinainen harjoitus. Jokaiseen harjoitukseen löytyy myös vastaus joka tosin kannattaa katsoa vasta kun harjoitus on tehty :-)

Tehtävä 1

Käy VB:n valikot rauhassa läpi, yritä löytää ja muistaa noin kymmenen tärkeintä valikkoa. Avaa uusi "Standard EXE" -tyyppinen projekti. Avaa koodi-ikkuna. Lisää tämä tiedosto ohjelmakoodin paikalla ja suorita ohjelma. Tuloksena tulisi olla kuvan mukainen ohjelma avattaessa ja suljettaessa.

Tehtävä 1
Tehtävän 1 lopputulos.

Tehtävän 1 ratkaisu löytyy myös täältä.

Tehtävä 2

Nyt teemme ensimmäisen varsinaisen Visual Basic -sovelluksen. Aloita työ avaamalla tyhjä Standard EXE -tyyppinen projekti. Lisää lomakkeelle CommandButton -tyyppinen kontrolli (painike). Jos et tiedä minkänäköinen on CommandButton -painike, pidä hiirtä kunkin kontrollin päällä niin pian ilmestyy keltainen pikaohje joka kertoo em. kontrollin tyypin:

CommandButton pikaohje
Kuvassa hiiri on painikkeen päällä.

Napsauta painiketta kerran jolloin se menee "pohjaan", siirrä kursori lomakkeen päälle ja maalaa hiiren vasen painike pohjassa sopivan kokoinen painike lomakkeelle.

CommandButton:n maalaaminen
Kuvassa maalaamme valittua kontrollia (CommandButton) lomakkeelle.

Voit lisätä kontrollin lomakkeelle myös siten, että tuplanapsautat valittua kontrollia.

Nyt meillä on oma kontrollimme lomakkeella. Voit ajaa ohjelman valitsemalla Run -valikosta Start -toiminnon tai painamalla F5 -näppäintä. Ohjelma ei valitettavasti tee vielä mitään muuta kuin näyttää lomakkeen ja siinä olevan painikkeen:

Ohjelman suoritus
Kuvassa ensimmäinen ohjelmamme ajossa.

Seuraavaksi lisäämme ohjelmaan tapahtuman, tarkemmin sanottuna Click -tapahtuman. Voit lisätä tapahtuman kahdella tavalla. Ensimmäinen tapa on helpoin, tällä saat lisättyä ns. oletustapahtuman joka esim. painikkeella on Click. Oletustapahtuma lisätään siten, että tuplanapsautat haluttua kontrollia (meidän tapauksessamme painiketta eli CommandButton:ia) jolloin avautuu ohjelmakoodi-ikkuna ja siihen valmiina alla olevan näköinen ohjelmakoodi:

Click -tapahtuma
Kuvassa olemme luoneet Click -tapahtuman CommandButton -painikkeelle.

Jos emme halua luoda oletustapahtumaa, voimme luoda tapahtumia myös siten, että avaamme ensin ohjelmakoodi-ikkunan ja sitten valitsemme halutun kontrollin vasemmanpuoleisesta listasta:

Kontrollin valinta
Kuvassa olemme valitsemassa kontrollia.

Tällöinkin syntyy ns. oletustapahtuma. Nyt voit luoda toisenkin tapahtuman valitsemalla oikeanpuoleisesta listasta haluamasi (valittuun kontrolliin liittyvän) tapahtuman:

Tapahtuman valinta
Kuvassa olemme valitsemassa sopivaa tapahtumaa kontrollillemme.

Valitsimme esimerkissämme tapahtumaksi MouseMove -tapahtuman ja VB luo valmiin ohjelmakoodin em. tapahtumalle.

Lopputulos on se, että meillä on nyt kaksi painikkeeseen (CommandButton) liittyvää tapahtumaa, Click ja MouseMove. Click -tapahtuma syntyy kun käyttäjä napsauttaa hiirellä painiketta, MouseMove -tapahtuma syntyy kun hiirtä pidetään (liikutetaan) painikkeen päällä.

Lisätään vielä em. tapahtumiin ohjelmakoodia. Haluamme ohjelman näyttävän "Hei Maailma!" -tekstin kun käyttäjä napsauttaa hiirellä painiketta. Toisekseen, haluamme, että ohjelmamme (lomakkeen) osoitepalkissa näkyisi kellonaika silloin kun käyttäjä pitää hiiren kursoria painikkeen päällä. Toteuttaaksemme em. toiminnot voit kirjoittaa alla olevat lauseet tapahtumien sisään:

Click -tapahtuman sisään tuleva ohjelmakoodi:

MsgBox "Hei Maailma!"

MouseMove -tapahtuman sisään tuleva ohjelmakoodi:

Me.Caption = Now

Jos kaikki meni oikein, tulisi ohjelman ollessa käynnissä ja napsauttaessasi hiirellä painiketta näkyä näytöllä seuraavaa:

Tehtävä 2
Kuvassa olemme ajamassa tehtävään 2 liittyvää ohjelmaa.

Ps. Voit ladata tehtävä 2:n ohjelman täältä.

Tehtävä 3

Aloita Standard EXE -projekti ja lisää oletuksena avautuvaan lomakkeeseen seuraavat kontrollit: Sijoittele kontrollit järkevästi ja muuta kontrollien nimet sopiviksi (esim. Text1 --> txtNimi, jne.). Suorita ja käännä ohjelma.

Tehtävän 3 ratkaisu löytyy myös täältä.

Tehtävä 4

Tee ohjelma, jossa on otsikkokenttä, tekstikenttä ja painike. Muuta kunkin kontrollin nimi sopivaksi, kuten myös lomakkeen nimi ja otsikko. Katso esimerkkiä alla olevasta kuvasta:

Tehtävä 4
Tehtävään liittyvä lomake.

Ohjelmasi tulee toimia siten, että käyttäjä syöttää tekstikenttään salasanansa. Tämän jälkeen käyttäjän tulee painaa "Tarkista" -painiketta. Jos salasana -kenttä on tyhjä, ohjelman tulee kertoa siitä käyttäjälle. Jos salasana on väärä, ilmoitetaan siitä käyttäjälle. Jos salasana on oikea (tässä tapauksessa salasana on 12345), ilmoitetetaan siitä käyttäjälle.

Tehtävän 4 ratkaisu löytyy myös täältä.

Tehtävä 5

Tee ohjelma, jossa käytät vähintään neljää OptionButton -kontrollia (tee kontrolleista taulukko). Kontrolli valittaessa näytä sitä vastaava kontrolli (esim. valittaessa OptionButton indeksillä 0 näytetään painike, indeksillä 1 näytetään tekstikenttä, jne.).

Tehtävä 5
Tehtävään liittyvä lomake.

Muista piilottaa edellinen kontrolli ennen uuden kontrollin näyttämistä!

Tehtävän 5 ratkaisu täällä.

Tehtävä 6

Tee yksinkertainen valuuttamuunnin markkojen ja eurojen välille. Lisää lomakkeelle otsikkokentät ja tekstikentät. Lisää sopivaan kohtaan ohjelmakoodia, joka tekee valuuttamuunnoksen. Muista, että 1 euro on 5.94573 markkaa. Huomaa, että muunnos tulee tehdä kun käyttäjä syöttää lukuarvon. Jos lukuarvo syötetään euro -kenttään, näytetään vastaava summa markkoina markka -kentässä ja päinvastoin.

Tehtävä 6
Tehtävään liittyvä lomake.

Huom! Mitä tapahtuu jos syötät ei-numeerisia merkkejä? Miten voisit estää virheen syntymisen?

Tehtävän 6 ratkaisu täällä.

Tehtävä 7

Tee ohjelma, jossa on tekstikenttä johon voi kirjoittaa useamman kuin yhden rivin tekstiä. Lisäksi tekstikentässä tulee olla ns. vierityspalkit. Lisää näytölle kaksi otsikkokontrollia ja kaksi vierityspalkkia. Toisella vierityspalkilla vaikutetaan tekstikentän fontin kokoon, toisella tekstikentän taustaväriin. Käytä värin muodostamiseen RGB -metodia.

Tehtävä 7
Tehtävään liittyvä lomake.

Tehtävän 7 ratkaisu täällä.

Tehtävä 8

Tässä tehtävässä opettelemme tekemään kahdenlaisia metodeita, ns. funktioita (eli metodi jolla on paluuarvo) ja aliohjelmia (eli proseduureja eli metodi jolla ei ole paluuarvoa). Tee kuvan mukainen lomake, jossa oleviin kenttiin käyttäjän tulee syöttää kaksi lukua. Käyttäjän painaessa Tulosta -painiketta kutsutaan onkoOikea -funktiota, jolla tulee olla String -tyyppinen parametri ja Boolean -tyyppinen paluuarvo. Jos annettu tieto ei ole tyhjä ja se on vieläpä numeerinen (voit käyttää numeerisuuden tarkistukseen IsNumeric -funktiota), palautetaan True -arvo, muussa tapauksessa False -arvo. Tehdään lopuksi vielä Tulosta -aliohjelma, jolle annetaan parametrina double -tyyppinen arvo. Kutsutaan tulostusta molemmille käyttäjän syöttämille arvoille.

Tehtävä 8
Tehtävään liittyvä lomake.

Tehtävän 8 ratkaisu täällä.

Tehtävä 9

Tee ohjelma, jossa on (esim. 12) painiketta kontrollitaulukkona. Jotain painiketta napsautettaessa kutsutaan ensin MuutaOtsikko -aliohjelmaa, jolle annetaan painike viittausparametrina. Aliohjelma kysyy käyttäjältä painikkeen uutta otsikkoa ja asettaa käyttäjän syöttämän otsikon painikkeen uudeksi otsikoksi. Tämän jälkeen kutsutaan MuutaVari -aliohjelmaa, joka kysyy kolme lukua väliltä 0-255. Tämän jälkeen luvut muunnetaan RGB -väriarvoksi ja asetetaan viittausparametrina tulleeseen painikkeeseen.

Tehtävä 9
Tehtävään liittyvä lomake.

Huom! Jotta taustavärin muutos näkyisi, varmista, että painikkeen Style -ominaisuus kohdassa on arvo 1 (Graphical).

Tehtävän 9 ratkaisu täällä.

Tehtävä 10

Tee ohjelma, jossa on yhdeksän OptionButton -kontrollia (kontrollitaulukko). Nimeä kontrollit muuttujien mukaan. Kun käyttäjä napsauttaa esim. String -kohtaa, kysytään käyttäjältä String -tyyppinen tieto, tallennetaan se em. tyyppiseen muuttujaan ja lopuksi tulostetaan muuttujan sisältö.

Tehtävä 10
Tehtävään liittyvä lomake.

Huomaa, että tietyt muuttuja-arvot on syötettävä oikein, muutoin ohjelmasi kaatuu.

Tehtävän 10 ratkaisu täällä.

Tehtävä 11

Tee ohjelma jossa on kaksi painiketta. Syötä nimi -painiketta painettaessa ohjelma pyytää käyttäjää syöttämään nimensä. Jos nimi on muuta kuin tyhjää, lisätään nimi dynaamiseen String -tyyppiseen taulukkoon. Taulukon koot saat selville esim. UBound -funktiolla. Tulosta nimet -painiketta painettaessa tulostetaan taulukossa olevat nimet.

Tehtävä 11
Tehtävään liittyvä lomake.

Voit käyttää nimien tulostukseen MsgBox -lausetta, yritä tulostaa tällöin nimet allekkain. Käytä vbCrLf lauseketta luodaksesi rivinvaihdon. Huom. Joudut määrittelemään taulukon ennen UBound:n käyttöä. Tällöin taulukkoon tehdään yksi tietue. Toinen tapa ratkaista ongelma on olla käyttämättä UBound:ia ja käyttää sen sijasta laskurimuuttujaa, joka pitää sisällään taulukon nykyisen koon.

Tehtävän 11 ratkaisu täällä.

Tehtävä 12

Määrittele tyyppimäärittelyä käyttäen oma tyyppisi nimeltä Asiakas. Asiakkaan tietoja ovat mm. asiakkaan etu- ja sukunimi sekä syntymävuosi (muitakin tietoja voi olla). Luo em. tyypistä dynaaminen taulukko. Lisää näytölle painike ja lista. Käyttäjän painaessa painiketta kysytään tyyppimäärittelyssä määritellyt tiedot ja lisätään uusi tietue dynaamiseen taulukkoon. Lisää tieto myös listaan.

Tehtävä 12
Tehtävään liittyvä lomake.

Et tarvitse UBound:ia tässä tehtävässä selvittääksesi taulukon koon, sama tietohan löytyy listasta. Jos yhtään nimeä ei olla syötetty, on listan koko 0... Kun yksi nimi on syötetty, on listan koko 1, jne.

Tehtävän 12 ratkaisu täällä.

Tehtävä 13

Tee ohjelma, jossa on yksi painike. Painiketta painettaessa käyttäjää pyydetään syöttämään kolme lukua. Tutki luvut If -lausetta käyttäen ja kerro niiden oikea järjestys suurimmasta pienimpään.

Tehtävä 13
Tehtävään liittyvä lomake.

Huomio, että luvut voivat olla myös yhtäsuuria!

Tehtävän 13 ratkaisu täällä.

Tehtävä 14

Tee ohjelma, jossa on tekstikenttä ja painike. Käyttäjän tulee syöttää tekstikenttään luku väliltä 4-10. Jos käyttäjä syöttää muun kuin numeerisen arvon, varoitetaan häntä siitä. Jos luku on 0-3 tai suurempi kuin 10, kehoitetaan syöttämään luku 4-10. Jos luku on 4-6, haukutaan suoritusta kehnoksi, luvun ollessa 7, 8 tai 9 sanotaan kohtuulliseksi ja luvun ollessa 9 tai 10 kehutaan kiitettäväksi. Käytä Select Case -lausetta. Laita myös jokainen MsgBox erilaisella ikonilla.

Tehtävä 14
Tehtävään liittyvä lomake.

Tehtävän 14 ratkaisu täällä.

Tehtävä 15

Tee ohjelma, jossa on painike jota painamalla lasket For -silmukkaa käyttäen luvut 10, 20, 30, .... , 980, 990 ja 1000 yhteen (eli luvut väliltä 10 - 1000 kymmenen luvun välein). Näytä tulos ja laskettavat numerot kuten kuvassa.

Tehtävä 15
Tehtävään liittyvä lomake.

Jos haluat muokata tekstiä, voit tarvita Left ja Len -funktioita. Left:llä voit ottaa esim. String -tyyppisestä muuttujasta tietyn määrän merkkejä, Len -funktio taasen palauttaa String -tyyppisen tiedon pituuden.

Tehtävän 15 ratkaisu täällä.

Tehtävä 16

Tee ohjelma, jossa on yksi painike. Painiketta painettaessa kysytään käyttäjältä silmukassa nimi (oltava eri kuin tyhjä, pitempi kuin 3 kirjainta) ja ikä, oltava suurempi kuin nolla ja pienempi kuin 150. Kun oikeat tiedot on syötetty, tulostetaan teksti "Hei nnnn, olet syntynyt vuonna xxxx." missä nnnn on nimi ja xxxx on käyttäjän syntymävuosi (laske iästä).

Tehtävä 16
Tehtävään liittyvä lomake.

Nykyisen päivämäärän saat selville seuraavasti: now()
Tästä saa muokkaamalla vuoden seuraavasti: format(now(), "yyyy")

Tehtävän 16 ratkaisu täällä.

Tehtävä 17

Kopioi alla oleva ohjelmakoodi tyhjään Standard EXE -projektiin jossa on yksi painike (CommandButton):
Private Sub Command1_Click()

    Dim X As Long
    Dim sKertotaulu As String

    X = 1
    sKertotaulu = "Kymmenen kertotaulu:" & vbCrLf & vbCrLf

    Do
        sKertotaulu = sKertotaulu & X & " * 10 = " & (X * 10) & vbCrLf
    Loop While (X < 10)

    MsgBox sKertotalu, vbInformation

End Sub
Tehtävänäsi on selvittää ohjelmassa oleva(t) virhe(et).

Tehtävän 17 ratkaisu täällä.

Tehtävä 18

Avaa esimerkki.frm lomake ja lisää siihen sellainen virheenkäsittely, että ohjelma ei kaadu.

Tehtävä 18
Tehtävään liittyvä lomake.

Tehtävän 18 ratkaisu täällä.

Tehtävä 19

Tee ohjelma, jossa on kolme painiketta ja kuvakontrolli (Image). Ensimmäistä painiketta painettaessa määritetään minimi- ja maksimifonttikoot (12-26) ja näytetään fontinvalintaikkuna josta valittu fontti asetetaan painikkeen tekstin uudeksi fontiksi. Toisesta painikkeesta avataan värinvalintaikkuna, josta valittu väri asetetaan uudeksi taustaväriksi lomakkeelle. Kolmannesta painikkeesta asetetaan tarvittavat suodattimet ja pyydetään käyttäjää valitsemaan kuvatiedosto joka sen jälkeen näytetään kuvakontrollissa (LoadPicture -käskyä käyttäen).

Tehtävä 19
Tehtävään liittyvä lomake.

Huom! Huomioi mahdolliset virhetilanteet!

Tehtävän 19 ratkaisu täällä.

Tehtävä 20

Tee ohjelma, jossa käyttäjältä kysytään hänen ikänsä kyselyikkunalla. Jos syöte on numeerista (IsNumeric), kerrotaan käyttäjän syntymävuosi ja kysytään haluaako käyttäjä kokeilla vielä kerran (Yes, No), oletuspainikkeena No -painike. Jos syöte ei ole numeerinen, kerrotaan siitä käyttäjälle ja kysytään haluaako hän kokeilla vielä uudestaan, oletuspainikkeena painike 1.

Tehtävä 20
Tehtävään liittyvä lomake.

Tehtävän 20 ratkaisu täällä.

Tehtävä 21

Tee ohjelma, jossa on kaksi päävalikkoa, Tiedosto ja Ominaisuudet. Tiedosto -valikolla on Sulje -alivalikko, Ominaisuudet -valikolla on kaksi alivalikkoa, Valitse väri ja Valitse fontti. Valitse väri -valikolla on kolme (tai enemmän) alivalikkoa joilla valitaan taustaväri (esim. punainen, vihreä ja keltainen), Valitse fontti -valikolla on yksi alivalikko, jonka indeksi on 0. Ohjelmaa ladattaessa luo uusia ilmentymiä em. alivalikosta, yksi kutakin fonttia varten. Lisää näytölle myös otsikkokenttä, jonka fonttia muutat kun käyttäjä valitsee haluamansa fontin. Näytä fonttilistaus (eli käytännössä Näytä fontti -valikko koska päävalikkoa ei näytetä vaan sen alivalikot) kun käyttäjä napsauttaa hiiren oikeaa painiketta otsikkokentän päällä.

Tehtävä 21
Tehtävään liittyvä lomake.

Huom! Saat selville järjestelmässä olevat fontit käyttämällä Screen -olion FontCount ja Fonts -ominaisuuksia.

Tehtävän 21 ratkaisu täällä.

Tehtävä 22

Tee ohjelma, jossa käytät tyyppimäärittelyä ja tiedostoja siten, että käyttäjä voi syöttää nimensä, lähiosoitteensa, postiosoitteensa ja ikänsä tekstikenttiin, joista tieto luetaan itsemääriteltyyn muuttujaan (jos tiedot ovat oikeita) ja tallennetaan tiedostoon. Tiedostoon tallennuksen jälkeen (ja myös ohjelma käynnistettäessä) luetaan tiedoston sisältö listaan.

Tehtävä 22
Tehtävään liittyvä lomake.

Huom. Tässä tehtävässä ei keskitytä miettimään vanhojen tietojen säilyttämistä! Vinkkinä niille jotka haluaa säilyttää useamman kuin yhden tiedon, uutta tietoa tallennettaessa kannattaa lukea vanha tieto talteen ja tallentaa se takaisin + uusi tieto perään.
Esimerkkikoodi: tehtava22parannettu.frm

Tehtävän 22 ratkaisu täällä.

Tehtävä 23

Tee ohjelma, jossa on MDI -ikkuna ja siinä valikko jossa on kuusi vaihtoehtoa. Jokaisesta valikosta tulee näyttää erityyppinen ikkuna.

Tehtävä 23
Tehtävään liittyvä lomake.

Huom! Muista asettaa MDI -ikkuna käynnistyväksi objektiksi.

Tehtävän 23 ratkaisu täällä.

Tehtävä 24

Tee ohjelma, jossa on kuvakontrolli jossa on valitsemasi kuva. Lisää ohjelmaan Kopioi, Leikkaa ja Liitä -valikot Muokkaa -päävalikon alle. Lisää ohjelmakoodi joka suorittaa kuvan kopioinnin ja leikkauksen leikepöydälle ja liittämisen kuvakontrolliin kuvamuodossa.

Tehtävä 24
Tehtävään liittyvä lomake.

Kannattaa siirtää kuvatieto BMP -muotoisena. Varmista ohjelman toimivuus kopioimalla tai leikkaamalla kuvatieto ja liittämällä se esim. piirto-ohjelmaan ja päinvastoin.

Tehtävän 24 ratkaisu täällä.

Tehtävä 25

Tee ohjelma, jossa on kaksi kuvakontrollia. Lisää kumpaankin kontrolliin OLE Drag & Drop -tuki siten, että voit raahata kuvakontrollista toiseen kuvan. Eli esim. vasemman kuvakontrollin kuvan oikeaan kuvakontrollliin tai päinvastoin (jolloin molemmat kuvakontrollit näyttävät samaa kuvaa).

Tehtävä 25
Tehtävään liittyvä lomake.

Lisää virheentarkistus siltä varalta, että raahattava tieto ei olekaan bittikarttamuotoista!

Tehtävän 25 ratkaisu täällä.