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 opetellaan peruskontrollit. Tämän osion jälkeen opiskelija tietää yleisempien kontrollien käyttötavat ja osaa asettaa niiden tärkeimmät ominaisuudet ja kirjoittaa ohjelmakoodia kontrollin ja ohjelman toiminnan kannalta oikeisiin tapahtumiin.

Kontrollit

Visual Basic:ssa kontrollit ovat lomakkeelle sijoitettavia komponentteja kuten painike, otsikkoteksti ja tekstikenttä. Näitä kontrolleja eli komponentteja voidaan kutsua myös olioiksi. Mutta muista, että olio taasen ei välttämättä ole kontrolli!

Kontrollit ovat Visual Basic -ohjelman käyttöliittymä, kuten alla esitettävä ohjelma, jossa on lomake ja siinä kaksi kontrollia, painike ja tekstikenttä.

Perusohjelma
Kuvassa on esitetty pieni ohjelma, jossa on kolme oliota (lomake ja siinä kaksi kontrollia).

Käyttäjä aiheuttaa kontrolleille tapahtumia (esim. napsauttaa painiketta hiirellä) jonka seurauksena suoritetaan em. tapahtumaan liittyvää ohjelmakoodia. Tämän vuoksi Visual Basic -ohjelmointia voidaan kutsua tapahtumaohjatuksi ohjelmoinniksi.

Kontrollien nimeäminen

Kontrollit kannattaa siis nimetä oikein. Kysymys kuuluukin, mikä on sopiva nimi kontrollille? Yksi tapa nimetä kontrollit on ottaa muutama kirjain (lyhenne) kontrollin nimestä (TextBox --> txt) ja loput mitä kontrollilla tehdään (kysytään etunimeä --> Etunimi) josta saadaankin txtEtunimi.

KontrolliSopiva lyhenneesimerkki kontrollin nimestä
FormfrmfrmAloitus
CheckBoxchkchkNaytaKuvat
ComboBoxcmo / combocboTilaukset / comboTilaukset
BommandButtoncmdcmdLaskeYhteen
Framefra / framfraTiedot / frameTiedot
(Horizontal/Vertical)scroll bar(h/v)sb / scroll(h/v)sbKuva / scrollKuva
ImageimgimgKuva
LabellbllblOtsikko
MenumnumnuTiedosto
OptionButtonoptoptIka
PictureBoxpic / picturepicKuva / pictureKuva
TextBoxtxttxtEtuNimi

Kontrollin ominaisuudet

Kontrollilla on erilaisia ominaisuuksia, tärkeimpinä on kontrollin nimi -ominaisuus. Jos nimeämme esim. CommandButton -tyyppisen painikkeen nimelle cmdPainike, voimme käyttää ohjelmakoodissamme em. painikkeen (kontrollin eli olion) ominaisuuksia seuraavasti:
cmdPainike.Caption = "Painikkeen uusi otsikko"
Kontrollin ominaisuuksia voi vaihtaa Properties -ikkunan kautta. Alla esitetään tärkeimmät VB:n kontrollit ja niihin liittyvät tärkeimmät ominaisuudet.

HUOM! Voit halutessasi muokata useamman kontrollin ominaisuuksia kerralla valitsemalla halutut kontrollit ja muuttamalla haluamasi asetukset.

Kontrollien yleisempiä ominaisuuksia

Seuraavassa taulukossa on listattu kontrollien yleisimpiä ominaisuuksia ja selitetty mitä em. ominaisuudet tekevät. Huomioi, että kaikissa kontrolleissa ei ole välttämättä em. ominaisuuksia.
OminaisuusMihin ominaisuus vaikuttaa
AppearanceMäärittää näytetäänkö kontrolli kolmiulotteisena vai "tasaisena lättynä".
AutoRedrawTämä ominaisuus kertoo piirretäänkö komponentti automaattisesti uudestaan vai ei.
BackColorMäärittää kontrollin taustavärin.
CaptionKontrollin näkyvä "selite" tai nimi. Tekstikentällä vastaava ominaisuus on Text, lomakkeella Title.
EnabledMäärittää reagoiko kontrolli käyttäjän toimenpiteisiin (esim. hiiren napautukseen).
FontMäärittää komponentissa olevan tekstin esittämiseen käytettävän fontin.
ForeColorMäärittää komponentin ns. etuvärin, käytännössä fontin väri.
Height / WidthMäärittää komponentin korkeuden/leveyden.
KeyPreviewMäärittää ohjataanko näppäimistön painallustapahtumat ensin lomakkeelle vai kontrollille
Left / TopMäärittää komponentin vasemman yläkulman sijainnin (esim. lomakkeen) vasemmasta reunasta/yläreunasta.
MouseIcon / MousePointerMäärittää hiiren ikonin / ikonin tyypin hiiren kursorin ollessa kontrollin päällä.
NameMäärittää kontrollin nimen. Tätä nimeä käytetään ohjelmakoodissa joten jokainen kontrolli kannattaa nimetä kunnolla!
PictureMäärittää kontrollissa näkyvän kuvan.
TabIndexJos kontrollin TabStop -ominaisuus on päällä, tämä ominaisuus määrittää järjestyksen jonka mukaan kohdistus siirtyy (TAB -näppäintä painettaessa). Indeksi 0 on ensimmäinen, 1 toinen, jne.
TabStopMäärittää voiko kontrolli saada kohdistuksen TAB -näppäintä painettaessa.
TagJokaisella kontrollilla on ns. tagi johon voit tallentaa kontrollikohtaista tietoa.
ToolTipTextVinkkiteksti, joka näytetään hiiren kursorin ollessa kontrollin päällä. Kokeile viemällä hiiren kursori tämän päälle.
VisibleMäärittää näytetäänkö kontrolli ohjelman suorituksen aikana vai ei

Kontrollin ominaisuuksien muuttaminen

Kontrollien ominaisuuksia voidaan siis muuttaa suunnittelutilassa valitsemalla kontrolli ja muuttamalla haluttuja ominaisuuksia Properties -ikkunaa käyttäen:

Properties -ikkuna
Kontrollin asetusten muuttaminen Properties -ikkunaa käyttäen.

Huomaa kuitenkin, että ominaisuudet vaihtelevat hiukan riippuen siitä, minkä kontrollin asetuksia muutat, kaikilla kontrolleilla EI ole samoja ominaisuuksia.

Kontrollin ominaisuuksia voi muuttaa myös ohjelman suorituksen aikana, ohjelmakoodissa. Seuraavassa esimerkissä muutamme TextBox -kontrollin (nimeltään txtNimi) ominaisuuksia ohjelman suorituksen aikana, tarkemmin sanottuna lomakkeen lataustapahtumassa (Form_Load). Luo siis uusi Standard EXE -projekti ja lisää lomakkeelle yksi TextBox -kontrolli ja muuta sen nimeksi (name) txtNimi. Kopioi alla oleva ohjelmakoodi ohjelmaasi:

Private Sub Form_Load()
    txtNimi.Text = "Teppo Testaaja"
    txtNimi.BackColor = vbRed
    txtNimi.BorderStyle = vbBSNone
    txtNimi.ToolTipText = "Tämä on ns. Tooltip -teksti joka näkyy kun laitat hiiren kursorin kontrollin päälle!"
End Sub
Tuloksena on ohjelma, jossa on TextBox -tyyppinen kontrolli. Ohjelmaa ajettaessa kontrollin tekstiksi tulee "Teppo Testaaja", kontrollin taustaväriksi punainen, kontrollin reunukset poistetaan ja kontrollille lisätään ns. tooltip -teksti.

Kontrollien tapahtumat

VB -ohjelmointi perustuu paljolti käyttäjän aiheuttamiin tapahtumiin. Kontrolleilla on erilaisia tapahtumia joiden "sisään" voidaan kirjoittaa ohjelmakoodia. Ehkäpä yleisin tapahtuma on painikkeen Click -tapahtuma joka syntyy kun käyttäjä napsauttaa hiirellä painiketta. Alla olevassa esimerkissä on kirjoitettu lyhyt ohjelmakoodi painikkeen (cmdPainike) Click -tapahtuman sisään:
Private Sub cmdPainike_Click()
    MsgBox "Napsautit painiketta!"
End Sub
Aloitus -sivulla opettelimme lisäämään erilaisia tapahtumia kontrollille. Huomaa, että kontrolleilla voi olla hyvinkin erilaisia tapahtumia eikä kaikilla kontrolleilla ole samoja tapahtumia. Älä kirjoita ohjelmakoodia mihin sattuu tapahtumaan, tämä voi aiheuttaa ongelmia. Yksi hyvä esimerkki "huonosti" sijoitetusta tapahtumasta on alla:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    MsgBox "Liikutit hiirtä!"
End Sub
Ohjelma näyttää viestilaatikon aina kun liikautat hiirtä lomakkeen päällä!

Huom! Muista, että voit kutsua kontrollin tapahtumaa itsekkin eli sinun ei tarvitse odottaa, että käyttäjä painaa esim. painiketta vaan voit kirjoittaa ohjelmakoodin: cmdPainike_Click() joka kutsuu cmdPainike -nimisen painikkeen Click -metodia.

Kontrollien tapahtumia

Seuraavassa taulukossa on listattu muutama perustapahtuma joiden tietäminen on tärkeää jotta pystyy tekemään VB -sovelluksia jotka reagoivat käyttäjän toimenpiteisiin.
TapahtumaMilloin tapahtuma suoritetaan
Click / DblClickTapahtuma syntyy kun käyttäjä napsauttaa/tuplanapsauttaa kontrollia hiiren painikkeella.
DragDropTapahtuma syntyy kun jokin olio (esim. Resurssienhallinnasta valittu tiedosto) raahataan ja pudotetaan kontrollin päälle.
DragOverTapahtuma syntyy kun jokin olio raahataan kontrollin yli.
GotFocus / LostFocusTapahtuma syntyy kun kontrolli valitaan / kontrollin kohdistus häviää.
KeyDown / KeyUpTapahtuma syntyy kun kontrollin ollessa valittuna painetaan näppäintä / vapautetaan näppäin.
KeyPressTapahtuma jossa voidaan käsitellä näppäimenpainallukset.
MouseDown / MouseUpTapahtuma syntyy kun hiiren painike painetaan alas / vapautetaan
MouseMoveTapahtuma syntyy kun hiiren kursoria liikutetaan kontrollin päällä.
PaintTapahtuma syntyy kun kontrolli piirretään uudestaan.

Kontrollien metodit

Ennen kuin puhumme mitään kontrollien metodeista, tulee meidän määritellä metodi. Tutustutaanpas siis metodeihin (eli funktioihin eli aliohjelmiin eli proseduureihin) täällä. Tämän jälkeen jatkamme itse kontrollien metodien parissa.

Kontrolleilla on siis ominaisuuksia ja tapahtumia. Tämän lisäksi kontrollilla voi olla myös metodeja. Esim. lomakkeella on Show -metodi, painikkeella Move -metodi, jne. Voit ajatella metodin olevan toiminto, jonka kontrolli toteuttaa. Niinpä kutsuttaessa lomakkeen Show -metodia pyydämme lomaketta "esille". Pyydettäessä painikkeelta Move -metodia pyydämme painiketta liikkumaan johonkin tiettyyn paikkaan. Kontrollin metodin formaali syntaksi on seuraavanlainen:

[lomake.][kontrolli.]metodi [metodin argumentit]

Hakasulkujen sisällä olevat tekstit ovat vapaaehtoisia. Otetaan esimerkki lomakkeella Form1 -olevan Command1 -painikkeen Move -metodin kutsusta:

Form1.Command1.Move 500, 500
Edellinen koodirivi siirtää painikkeen (Command1) kohtaan 500, 500 lomakkeella Form1. Sama asia voitaisiin kirjoittaa myös seuraavasti:
Command1.Move 500, 500
Tämä toimii, koska ohjelmakoodirivi on samalla lomakkeella missä siirrettävä painikekin on. Yhteenvetona voisikin todeta, että jos kutsut samalla lomakkeella olevan lomakkeen/kontrollin metodia, voit jättää lomakkeen nimen pois tai käyttää sen paikalla Me -sanaa (katso seuraava esimerkki). Jos kutsut jollakin toisella lomakkeella olevan lomakkeen/kontrollin metodia, tulee sinun kirjoittaa "koko rimpsu" kuten ensimmäisessä esimerkissämme teemme.
Me.Command1.Move 500, 500

Kontrollitaulukko

Joskus on kätevä käsitellä useampaa (samantyyppistä) kontrollia taulukkona (control array). Tällöin meillä voisi olla esim. kymmenen komentopainiketta, joiden kaikkien nimi on sama mutta painikkeet erotetaan toisistaan indeksinumerolla.

Voit luoda kontrollitaulukon kopioimalla kontrollin (valitse kontrolli, paina CTRL-C tai valitse Edit -valikosta Copy -toiminto) ja liittämällä (CTRL-V tai Edit -valikosta Paste -toiminto) takaisin lomakkeelle. VB kysyy haluatko luoda kontrollitaulukon johon vastaat Yes. Tämän jälkeen voit kopioida kontrolleja haluamasi määrän näytölle. Jokainen kontrolli saa saman nimen mutta eri indeksinumeron. Ensimmäisen kontrollin indeksinumero on 0, toisen 1, kolmannen 2, jne.

Kontrollitaulukko
Kuvassa on luotu kymmenestä Command -painikkeesta koostuva kontrollitaulukko.

Seuraavaksi teemme pienen esimerkkiohjelman joka tulostaa painiketta painettaessa tekstin "Painoit painiketta n" missä n:n paikalle tulostetaan painikkeen indeksinumero. Kopioi alla esitettävä ohjelmakoodi ohjelmaasi luotuasi ensin (esim. kahdentoista) painikkeen kontrollitaulukon.
Private Sub Command1_Click(Index As Integer)

    Command1(Index).Caption = "Painoit painiketta " & Index

End Sub

Kontrollitaulukko
Kuvassa esimerkkiohjelman tuloste.

Peruskontrollit

Seuraavassa taulukossa on listattu peruskontrollit ja lyhyt selite mitä niillä voi tehdä.
Kontrollin ikoniKontrollin nimiKontrollin selite
PictureBoxKuvakontrolliTällä kontrollilla voit esittää erityyppisiä (JPG, BMP, GIF) kuvatiedostoja sekä piirtää itse kontrolliin grafiikkakomennoilla.
LabelLabelOtsikkokontrollilla voit esittää tekstiä jota käyttäjä ei voi muokata.
TextBoxTextBoxTekstikontrollilla voit esittää tekstiä, lisäksi käyttäjä voi muokata tekstiä. Tätä käyttäjän syötettä voit käyttää ohjelmakoodissasi.
FrameFrameKehyskontrollilla voit "kerätä" samaan asiaan liittyvät kontrollit yhteen.
CommandButtonCommandButtonPainikekontrollilla voit vastaanottaa käyttäjän toimenpiteitä. Toimenpiteen seurauksena ohjelma voi tehdä jotain, esim. tulostaa tietoa, tallentaa tietoa yms.
CheckBoxCheckBoxValintakontrollilla käyttäjä voi valita onko esim. jokin tietty toiminto päällä tai ei. Lisäksi kontrolli voi olla ns. välitilassa jolloin sen arvo ei ole valittu eikä ei valittu. Sinulla voi olla useampi kuin yksi valintakontrolli, eivätkä niiden valinnat vaikuta toisiinsa.
OptionButtonOptionButtonTämä valintakontrolli on kuten edellinenkin mutta erona on se, että voit valita kontrollitaulukosta olevista kontrolleista vain yhden valituksi.
ComboBoxComboBoxValintalistalta voit valita yhden tiedon. Riippuen kontrollin tilasta riippuen käyttäjä voi muokata valintalistan tietoja.
ListBoxListBoxTämä valintalista eroaa edellisestä sen verran, että (kontrollin asetuksista riippuen) käyttäjä voi valita yhden tai useamman listalla olevan tietueen.
HScrollBarVScrollBarHScrollBar / VScrollBarVierityspalkista voidaan valita haluttu arvo määritellyltä vaaka/pystysuuntaiselta asteikolta.
TimerTimerAjastimella voit ajastaa jonkin tietyn toimenpiteen suoritettavaksi halutun ajan välein. Kontrolli ei näy suorituksen aikana.
DriveListBoxDriveListBoxTällä kontrollilla voit listata tietokoneessa olevat levyasemat (esim. C, D, E, jne.)
DirListBoxDirListBoxHakemistokontrolli listaa valitussa polussa olevat hakemistot.
FileListBoxFileListBoxTiedostokontrolli listaa valitussa hakemistossa olevat tiedostot ja tarvittaessa vain määrätyn päätteiset tiedostot.
ShapeShapeKuviokontrollilla voit piirtää yksinkertaisia kuvioita kuten neliöitä ja ympyröitä. Kuvioihin ei liity tapahtumia.
LineLineViivakontrollilla voit piirtää viivan. Viivakontrollilla ei ole tapahtumia.
ImageImageTämä kuvakontrolli on hiukan kevyempi kuin PictureBox.
Tehtävä 4
Tehtävä 5
Tehtävä 6
Tehtävä 7