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ä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:
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.
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:
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:
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:
Kuvassa olemme valitsemassa kontrollia.
Tällöinkin syntyy ns. oletustapahtuma. Nyt voit luoda toisenkin tapahtuman valitsemalla oikeanpuoleisesta listasta
haluamasi (valittuun kontrolliin liittyvän) tapahtuman:
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:
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:
- PictureBox
- Label
- TextBox
- Frame
- ComboBox
- VScrollBar
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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ää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ään liittyvä lomake.
Lisää virheentarkistus siltä varalta, että raahattava tieto ei olekaan bittikarttamuotoista!
Tehtävän 25 ratkaisu täällä.