Kirjautuminen

Haku

Tehtävät

Opasarkisto: Visual Basic -opas: Osa 2 - Käyttöliittymä

  1. Osa 1 - Johdanto
  2. Osa 2 - Käyttöliittymä
  3. Osa 3 - Muuttujat ja taulukot
  4. Osa 4 - Ehdot ja silmukat
  5. Osa 5 - Aliohjelmat ja funktiot
  6. Osa 6 - Hiiri ja näppäimistö
  7. Osa 7 - VB:n grafiikkakomennot
  8. Osa 8 - Tiedostot
  9. Osa 9 - WinAPIn käyttö

Kirjoittaja: Antti Laaksonen

Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi.

Melkein jokaiseen Windows-ohjelmaan kuuluu käyttöliittymä: käyttäjälle näkyvät ikkunat ja niiden sisällä olevat ohjaimet ja valikot. Visual Basicissa käyttöliittymän suunnittelu on helppoa, koska se tapahtuu suurimmaksi osaksi piirtämällä ja ikkuna on koko ajan näkyvillä lopullisessa muodossaan. Useimmat eri ohjainten ominaisuuksista ja tapahtumista ovat yhteisiä, ja niiden tarkoitusta ei ole vaikea päätellä. Tässä oppaassa käydään läpi tärkeimmät ohjaimet ja niiden yleisimmät käyttötarkoitukset. Lopuksi tulee vielä neuvoja käyttöliittymän suunnitteluun.

Ominaisuudet, tapahtumat ja toiminnot

Visual Basicin ohjaimiin liittyy monia ominaisuuksia, tapahtumia ja toimintoja. Eräät niistä ovat samoja melkein joka ohjaimessa, toiset taas erityisesti tiettyyn ohjaimeen kuuluvia. Jokaisella ohjaimella esimerkiksi on Name-ominaisuus, joka ilmoittaa ohjaimen nimen. Suurimman sallitun pituuden määräävä MaxLength sitä vastoin on pelkästään tekstikentän ominaisuus.

Ominaisuuksia ovat muiden muassa ohjaimen nimi, sijainti ja koko, siinä näkyvä teksti tai kuva, väri ja fontti. Joitain ominaisuuksia voi muuttaa vain suunnittelutilassa ominaisuuslistan avulla, ja ohjelman suorituksen aikana niitä pystyy pelkästään lukemaan. Toiset ominaisuudet ovat käytössä vain ohjelman ollessa käynnissä, ja niitä ei ole edes näkyvissä ominaisuuslistassa.

Seuraavassa on koodinpätkä, joka ensin muuttaa painonapin otsikon (Caption-ominaisuus) ja sitten näyttää sen viesti-ikkunassa.

Command1.Caption = "testi"
MsgBox Command1.Caption

Tapahtumia ovat esimerkiksi hiiren napsauttaminen ohjaimen yläpuolella tai näppäimen painaminen silloin, kun ohjain on aktiivinen. Tapahtuman yhteyteen voi kirjoittaa koodinpätkän, joka suoritetaan aina silloin, kun käyttäjä tai käyttöjärjestelmä aiheuttaa kyseisen tapahtuman. Koodi-ikkunassa valitaan yläreunan vasemmasta listasta ohjain ja oikeasta listasta sen tapahtuma. Visual Basic muodostaa automaattisesti tapahtuman pohjan.

Seuraavan koodin avulla tulee näkyviin viesti-ikkuna, kun käyttäjä painaa nappia. Tapahtuma on silloin Click.

Private Sub Command1_Click()
    MsgBox "Nyt painettiin nappia!"
End Sub

Toiminnot ovat koodista lähtöisin olevia viestejä ohjaimelle. Ohjaimen tiettyä toimintoa kutsutaan koodissa, jolloin ohjain itse pitää huolen lopusta. Toimintoja ei ole yhtä paljon kuin ominaisuuksia ja tapahtumia, ja ne saattavat esimerkiksi muuttaa ohjaimen paikkaa ja kokoa, asettaa ohjaimen aktiiviseksi tai lisätä vaikkapa listaohjaimeen uuden rivin.

Seuraava koodi asettaa Command1-ohjaimen aktiiviseksi (painetut näppäimet ohjautuvat ensin siihen), kun käyttäjä napsauttaa lomaketta.

Private Sub Form_Click()
    Command1.SetFocus
End Sub

Vaikka edellä puhuttiin vain ohjaimista, myös lomakkeella siis on ominaisuuksia, tapahtumia ja toimintoja.

Sijainti ja koko

Kun ohjain on piirretty lomakkeelle, sen sijaintia ja kokoa pystyy muuttamaan hiirellä. Useampia ohjaimia voi valita ympäröimällä ne hiiren avulla tai napsauttamalla jokaista Control-näppäin pohjassa. Ohjaimia voi myös kopioida näppäinyhdistelmillä Control + C ja Control + V (tai Shift + Insert). Jos ohjaimen piirtää kuvakehyksen tai kehyksen sisään, se liikkuu aina pääohjaimen mukana.

Ohjaimen sijainnin ilmoittavat ominaisuudet ovat Left ja Top, etäisyys vasemmasta reunasta ja etäisyys yläreunasta. Koon ilmoittavat ominaisuudet ovat Width ja Height, leveys ja korkeus. Seuraavassa kuvassa on esitelty näitä ominaisuuksia:

Ohjaimen sijaintia ja kokoa voi muuttaa suoraan näiden ominaisuuksien kautta:

Command1.Left = 300
Command1.Top = 300

Toinen tapa on käyttää Move-toimintoa:

Command1.Move 300, 300

Visual Basicin oletusmittayksikkö on twip, jonka pituus on 1/567 senttimetriä. Myöhemmin tutustutaan muihin mittayksiköihin.

Yhteisiä asioita

Seuraavat ominaisuudet on lähes joka ohjaimella:

Tavallisia tapahtumia ovat Click ja DblClick, joihin tullaan silloin, kun käyttäjä klikkaa ohjainta kerran tai kahdesti. Myös Enterin tai välilyönnin painaminen ohjaimen ollessa valittuna tulkitaan klikkaukseksi.

Seuraavaksi käydään läpi kaikki tavalliset ohjaimet ja niiden erityispiirteet.

Lomake ja MDI-lomake

Lomake (Form) on tavallinen ikkuna, MDI-lomake (MDI form) taas on koko ohjelman pääikkuna, jonka sisällä voi olla useampia ali-ikkunoita. Esimerkiksi monissa tekstinkäsittelyohjelmissa auki olevat tekstit ovat tällaisia ali-ikkunoita. Jos lomakkeen MDIChild-ominaisuus on True, se kuuluu MDI-lomakkeeseen.

Seuraavassa on lomakkeeseen liittyviä ominaisuuksia:

Jos viitataan sen lomakkeen ominaisuuteen tai toimintoon, johon koodi on kirjoitettu, voidaan lomakkeen nimi korvata sanalla Me tai jättää kokonaan pois. Siksi Form1.Caption, Me.Caption ja Caption tarkoittavat kaikki samaa, jos koodi on kirjoitettu Form1:seen. Uusi ikkuna avataan näytölle komennolla OmaFormi.Show ja ikkuna suljetaan komennolla Unload OmaFormi. Komento End sulkee kaikki ikkunat ja poistuu ohjelmasta. Toisen lomakkeen ohjaimiin pääsee käsiksi kirjoittamalla alkuun lomakkeen nimen, esimerkiksi Form2.Command1.Caption.

Ennen kuin lomake tulee näkyviin näytölle, siirrytään Load-tapahtumaan, johon kannattaa kirjoittaa kaikki alkutoimenpiteet. Vastaavasti Unload-tapahtuma suoritetaan aina viimeisenä. Activate-tapahtuma on silloin, kun lomake on jo näkyvillä, mutta se muuttuu aktiiviseksi. Kun lomakkeen koko muuttuu, siirrytään Resize-tapahtumaan.

Seuraava koodi siirtää ikkunan näytön keskelle heti aluksi. Paikka lasketaan näytön leveyden ja lomakkeen leveyden perusteella.

Private Sub Form_Load()
    Me.Left = Screen.Width / 2 - Me.Width / 2
    Me.Top = Screen.Height / 2 - Me.Height / 2
End Sub

Tämä koodi estää ohjelman lopettamisen Unload-tapahtumassa asettamalla Cancel-arvoksi True. Jumittuneen ohjelman sammuttaminen on kuitenkin Visual Basicissa aina mahdollista painamalla Control + Break, ja käännettyyn ohjelmaan tehoaa vanha kunnon Control + Alt + Delete.

Private Sub Form_Unload(Cancel As Integer)
    MsgBox "Eipäs lopukaan!"
    Cancel = True
End Sub

Ohjeteksti

Ohjeteksti (LabelBox) näyttää tavallista tekstiä lomakkeella. Teksti valitaan Caption-ominaisuudella. Jos AutoSize on True, ohjaimen koko muuttuu tekstin pituuden mukaan. Jos samaan aikaan WordWrap on True, tekstin leveys pysyy vakiona, mutta rivejä tulee tarvittaessa lisää.

Tekstikenttä

Tekstikenttä (TextBox) on tekstin kirjoittamiseen tarkoitettu alue, jossa toimivat tavalliset muotoilukomennot. Kirjoitettu teksti on Text-ominaisuudessa. Tekstin maksimipituuden voi määrittää MaxLength-ominaisuudella, ja jos tämä arvo on 0, teksti voi olla kuinka pitkä tahansa.

Tekstikenttä voi olla joko yksirivinen tai monirivinen. Jos rivejä tarvitaan enemmän, MultiLine-ominaisuuden arvoksi laitetaan True. Vierityspalkit valitaan silloin ScrollBars-ominaisuuden avulla. Tekstikenttää voi käyttää myös salasanan kysymiseen, jolloin PasswordChar on kirjoitetut merkit korvaava peitemerkki, tavallisesti tähti. Tekstikenttään kirjoittamisen voi lisäksi estää laittamalla Locked-ominaisuuden arvoksi True.

Aina, kun tekstikentän teksti muuttuu, tulee Change-tapahtuma. Seuraavassa esimerkissä tekstikenttään kirjoitettu teksti kopioituu välittömästi ikkunan otsikkoriville.

Private Sub Text1_Change()
    Me.Caption = Text1.Text
End Sub

Painonappi

Painonapissa (CommandButton) on tavallisesti tekstiä, joka valitaan Caption-ominaisuuden avulla. Jos kuitenkin Style on 1, siihen voi myös valita kuvan Picture-ominaisuuteen. Jos Default-ominaisuus on True, painonappi on tummennettuna ja jatkuvasti aktiivisena. Kun käyttäjä klikkaa nappia, tulee Click-tapahtuma.

Kehys

Kehykseen (Frame) voi järjestellä toisiinsa liittyviä ohjaimia, ja kun ohjaimet piirtää kehyksen sisään, ne myös liikkuvat sen mukana. Caption-ominaisuus määrää kehyksen vasemmassa yläreunassa olevan otsikon, jota välttämättä ei tarvitse laittaa.

Kuvakehys ja kuva

Kuvakehys (PictureBox) on monipuolinen ohjain, joka vastaa monilta osin lomaketta. Kuvakehykseen piirretyt ohjaimet liikkuvat sen mukana. Kuvan voi valita Picture-ominaisuudella, ja tuettuja kuvamuotoja ovat muiden muassa bmp, ico, gif, jpg ja wmf.

Jos pelkkä kuvan näyttäminen riittää, kannattaa kuitenkin valita kuva-ohjain (Image), joka kuluttaa vähemmän muistia. Silloin myös kuvan läpinäkyvä tausta näkyy oikein, ja jos Stretch-ominaisuus on True, kuvaa pystyy venyttämään ja kutistamaan.

Valintalistat

Valintalistoja on kahdenlaisia: tavallinen lista (ListBox) ja yhteen riviin mahtuva alasvetolista (ComboBox). Molempiin lisätään rivejä AddItem-toiminnolla ja poistetaan rivejä RemoveItem-toiminnolla, Clear-toiminto tyhjentää listan. Valittu rivi selviää ListIndex-ominaisuudesta, rivin sisältö Text- tai List-ominaisuudesta ja rivien määrä ListCount-ominaisuudesta. Jos Sorted-ominaisuuden arvo on True, lista järjestellään automaattisesti.

Tavallisen listan voi toteuttaa niin, että samalla kertaa pystyy valitsemaan useamman rivin. Tämä on mahdollista kahdella tavalla: MultiSelect- tai Style-ominaisuuden avulla. Ensimmäisessä tapauksessa lista näyttää tavalliselta, mutta useamman rivin valitseminen on mahdollista Control-näppäimen avulla. Toisessa tapauksessa jokaisen rivin alussa on valintaruutu. Toteutustavasta riippumatta SelCount-ominaisuus kertoo valittujen rivien määrän ja Selected-ominaisuus ilmoittaa yksittäisen rivin tilan.

Alasvetolista tuntee myös Style-ominaisuuden, mutta käyttötapa on eri. Jos Style on 0, alasvetolista toimii tavallisesti. Jos Style on 1, lista ei ole näkyvissä, vaan vaihtoehtoja voi kelata nuolinäppäimillä. Ja jos Style on 2, alasvetolistaan ei voi kirjoittaa itse, vaan valinta on tehtävä valmiista vaihtoehdoista. Toinen tapa estää kirjoittaminen on käyttää Locked-ominaisuutta.

Seuraavassa esimerkissä lomakkeella on lista List1 ja painonapit Command1 ja Command2. Aluksi listaan lisätään kolme riviä. Kun käyttäjä painaa ensimmäisestä napista, valittu kohta poistetaan listalta. Kun käyttäjä painaa toisesta napista, kaikki listan rivit näytetään vuorotellen viesti-ikkunassa.

Private Sub Form_Load()
    List1.AddItem "Eka rivi"
    List1.AddItem "Toka rivi"
    List1.AddItem "Kolmas rivi"
End Sub

Private Sub Command1_Click()
    If List1.ListIndex <> -1 Then
        List1.RemoveItem List1.ListIndex
    End If
End Sub

Private Sub Command2_Click()
    Dim i As Integer
    For i = 0 To List1.ListCount - 1
        MsgBox List1.List(i)
    Next
End Sub

Jos ListIndex on -1, mitään riviä ei ole valittu. Siksi listalta poistetaan rivi vain, jos ListIndex on joku muu kuin -1. Koska listan rivien numerointi alkaa nollasta, rivien määrä on yhtä suurempi kuin viimeisen rivin tunnus. Tämän takia rivejä näytettäessä käydään läpi rivit nollasta yhtä pienempään kuin ListCount.

Valintaruutu ja -nappi

Valintaruutuja (CheckBox) voi olla valittuna samaan aikaan useampia; valintanappeja (OptionButton) vain yksi. Jos valintaruudun Value on 1, se on valittu. Saman lomakkeen, kehyksen tai kuvakehyksen sisällä olevat valintanapit kuuluvat samaan sarjaan, jolloin niistä vain yksi voi olla valittuna. Jos valintanapin Value on True, se on valittu.

Vierityspalkit

Vierityspalkkeja on kahdenlaisia: vaakasuuntaisia (VScrollBar) ja pystysuuntaisia (HScrollBar). Molemmat toimivat samalla tavalla. Min on pienin arvo, Max suurin arvo ja Value senhetkinen arvo. Lisäksi SmallChange on muutoksen suuruus silloin, kun painetaan vierityspalkin päissä olevaa nuolta ja LargeChange on muutoksen suuruus silloin, kun painetaan vierityspalkin taustaa. Change-tapahtuma suoritetaan aina arvon muuttuessa ja Scroll-tapahtuma silloin, kun käyttäjä muuttaa arvoa hiirellä vetämällä.

Seuraavassa esimerkissä on pystysuora vierityspalkki VScroll1, jonka Min-ominaisuus on 0 ja Max-ominaisuus on 255. Valittu arvo tulee näkyviin ikkunan otsikkoriville, ja taustaväri myös muuttuu sen mukaan. Kun väri valitaan RGB-muodossa, jokainen värisävy (punainen, vihreä ja sininen) ilmoitetaan väliltä 0 – 255.

Private Sub VScroll1_Change()
    Me.Caption = VScroll1.Value
    Me.BackColor = RGB(0, 0, VScroll1.Value)
End Sub

Tiedostolistat

Asemalistan (DriveListBox), hakemistolistan (DirListBox) ja tiedostolistan (FileListBox) avulla pystyy toteuttamaan tiedoston valinnan. Asemalistan asema on ominaisuudessa Drive, hakemistolistan ja tiedostolistan hakemisto on ominaisuudessa Path ja valitun tiedoston nimi on ominaisuudessa FileName. Näytettäviä tiedostoja voi rajoittaa Pattern-ominaisuuden avulla: esimerkiksi "*.txt" näyttää tiedostolistassa vain tekstitiedostot.

Seuraava esimerkki kytkee asema-, hakemisto- ja tiedostolistan yhteen.

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()
    File1.Path = Dir1.Path
End Sub

Seuraava koodi näyttää tiedoston nimen hakemistopolun kanssa, kun käyttäjä napsauttaa tiedostoa listalla. Tässä pitää ottaa huomioon, että jos valittu hakemisto on juurihakemisto, kenoviiva on valmiiksi mukana hakemiston nimessä, mutta muuten se täytyy erikseen lisätä.

Private Sub File1_Click()
    If Right(Dir1.Path, 1) = "\" Then
        MsgBox Dir1.Path & File1.FileName
    Else
        MsgBox Dir1.Path & "\" & File1.FileName
    End If
End Sub

Ajastin

Ajastin (Timer) ei ole näkyvä ohjain. Sen tehtävänä on suorittaa Timer-tapahtumaan kirjoitettu koodi Interval-arvon määrittämin väliajoin. Interval-arvo ilmoitetaan millisekunteina, ja suurin mahdollinen arvo on 65535 millisekuntia eli 65,5 sekuntia. Pienin arvo riippuu käyttöjärjestelmästä: Windows 95, 98 ja ME suorittavat tapahtuman korkeintaan 18 kertaa sekunnissa, jolloin pienin todellinen arvo on noin 55 millisekuntia. Windows NT:llä, 2000:lla ja XP:llä pienin arvo on 10 ja 20 millisekunnin välillä.

Seuraavassa esimerkissä lomakkeella on Timer1-ajastin, jonka Interval on 1000. Tuloksena on joka sekunti päivittyvä kello ikkunan otsikkopalkissa.

Private Sub Timer1_Timer()
    Me.Caption = Time
End Sub

Lisää ohjaimista

Grafiikan piirtoon tarkoitetut ohjaimet kuvio (Shape) ja viiva (Line) käsitellään opassarjan viidennessä osassa samoin kuin muiden ohjainten grafiikkaan liittyvät ominaisuudet, tapahtumat ja toiminnot. Kahdeksannessa osassa perehdytään tarkasti näppäimistön ja hiiren käsittelyyn.

Oletusominaisuudet

Kullakin ohjaimella on oletusominaisuus, johon viitataan silloin, kun kirjoitetaan pelkästään ohjaimen nimi. Tekstikentän oletusominaisuus esimerkiksi on Text, jolloin Text1.Text ja Text1 tarkoittavat samaa asiaa. Oletusominaisuuksien käyttö hieman lyhentää koodia, mutta samalla vaikeuttaa sen lukua. Tekstikentän lisäksi Label1.Caption korvataan toisinaan Label1 ja Picture1.Picture korvataan Picture1. Muita oletusominaisuuksia käytetään ani harvoin.

Valikot

Valikot luodaan erillisellä editorilla, joka käynnistyy valitsemalla Tools-valikosta Menu Editor tai klikkaamalla vastaavaa kuvaketta työkalurivillä. Jokaisella valikkokohdalla on otsikko ja nimi, ja ne näkyvät peräkkäin listalla. Ensimmäisen tason valikkokohdat näkyvät ikkunan yläreunassa, ja niistä avautuvat alemmat valikkotasot. Valikkokohdalla on Click-tapahtuma.

Mahdollinen pikanäppäin valitaan Shortcut-listasta. Jos valikkokohdan Checked-ominaisuus on True, tekstin vieressä näkyy valintamerkki. Jos WindowList-ominaisuus on True, valikon lopussa näkyy automaattisesti MDI-ikkunan sisällä olevat ali-ikkunat.

Yksinkertainen valikko näyttää seuraavalta valikkoeditorissa:

Testi
····Eka
····Toka
········AliEka
········AliToka
····Kolmas

Ja ohjelmassa se näyttää tältä:

Jos valikkokohdan nimenä on pelkkä "-", valikkoon tulee näkyviin erotusviiva. Jos valikossa on valittavia kohtia, niiden Checked-ominaisuuden muuttumisesta täytyy huolehtia itse. Seuraavassa esimerkissä on kolme valikkokohtaa, mHelppo, mTavallinen ja mVaikea, joiden otsikot ovat vastaavasti "Helppo", "Tavallinen" ja "Vaikea". Vain yksi kohta voi kerrallaan olla valittuna. Tämä voisi olla osa pelin asetusvalikkoa.

Private Sub Form_Load()
    mTavallinen.Checked = True

End Sub

Private Sub mHelppo_Click()
    mHelppo.Checked = True
    mTavallinen.Checked = False
    mVaikea.Checked = False
End Sub

Private Sub mTavallinen_Click()
    mHelppo.Checked = False
    mTavallinen.Checked = True
    mVaikea.Checked = False
End Sub

Private Sub mVaikea_Click()
    mHelppo.Checked = False
    mTavallinen.Checked = False
    mVaikea.Checked = True
End Sub

Käyttöliittymän suunnittelu

Käyttöliittymän suunnittelussa kannattaa kokeilla erilaisia vaihtoehtoja ja ottaa mallia valmiista ohjelmista. Hyvää ohjelmaa voi myös helposti käyttää näppäimistöllä. Tässä on muutamia vinkkejä suunnitteluun.


Kommentit

Puhveli [07.04.2004 11:35:26]

Lainaa #

Tuota, yhden virheen huomasin. Tuohon VBssä kelvolliseen muuttujannimeen voi sisältyä a-z ja numeroiden lisäksi myös ääkkösiä ja erikoismerkkejä (ainakin _ muuttujan keskellä)

Puhveli [07.04.2004 11:36:11]

Lainaa #

siis tarkoitin että merkki "_" voi olla muuttujan keskellä, esim kahvi_on_hyvää

Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta