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 käyttämään erityyppisiä ikkunoita. Tämän osion jälkeen opiskelija tietää mikä ikkuna soveltuu parhaiten mihinkin tilanteeseen ja osaa käyttää ikkunoita omissa ohjelmissaan.

Ikkuna

VB -ohjelmointi perustuu ikkunoihin. Toki voit tehdä VB:lläkin ohjelman ilman ikkunoita mutta silloin kannattaa pohtia onko käytössä väärä ohjelmointikieli em. asian tekemiseen koska VB on suunniteltu RAD:ia (Rapid Application Development) varten eli nopeaan ohjelmistokehitykseen. Muissa ohjelmointikielissä ikkunoiden käyttö voi vaatia paljon ohjelmointia kun VB:ssä saat ikkunan käyttöön hiiren painikkeen napsautuksella.

Kuten olet jo ehkä huomannut, ikkunoita on erityylisiä. Ohjelma voi koostua yhdestä tai useammasta ikkunasta. Jos ohjelmalla on enemmän kuin yksi ikkuna yhtäaikaa käytössä, voivat ikkunat olla erillisiä jolloin puhutaan ns. SDI -mallista (Single Document Interface) tai yhden pääikkunan sisällä jolloin puhutaan ns. MDI -mallista (Multi Document Interface). Tämän lisäksi on yleistymässä ns. resurssienhallinta - tyyli. Alla kuvat kunkin tyylisestä ikkunointimallista.

SDI
SDI -tyyli.

MDI
MDI -tyyli.

Resurssienhallinta
Resurssienhallinta -tyyli.

Ikkunoita voi siis näyttää useammalla eri tyylillä ja lisäksi ikkuna itsessään voi olla oman tyylisensä. Käymme seuraavaksi läpi yleisimmät tyylit. "Perusikkuna" on ikkuna, jonka kokoa voi muuttaa ja siinä on ikkunan pienennyspainike Pienennys, ikkunan koon muutospainike Koon muutos ja ikkunan sulkupainike Sulkeminen.

Normaali ikkuna
Normaali ikkuna.

Ikkunan BorderStyle- ja ControlBox- ominaisuuksia muuttamalla voit vaikuttaa ikkunan ulkoasuun merkittävästi. Ensimmäinen määrittää millainen reunus ikkunalla on ja voiko ikkunan kokoa muuttaa (toki voit estää koon muutoksen vaikka ikkuna sen sallisi). Toinen ominaisuus määrittää näytetään edellä mainittuja kolmea painiketta ikkunan oikeassa yläkulmassa.

Erikoisikkuna
Erikoisikkuna.

Tässä kappaleessa harjoittelemme SDI- ja MDI -tyyppisten ikkunoiden ja BorderStyle- ja ControlBox -ominaisuuksien käyttöä.

SDI

Ehkäpä yleisin tapa tehdä ohjelma on SDI -ikkunointimalli missä jokainen ikkuna on omansa. Ikkunoille voidaan määritellä ns. modaalisuus, eli onko jokin ikkuna "muiden yläpuolella". Toinen ikkuna voidaan näyttää (jos nykyinen ikkuna EI ole modaalinen) Show -metodia käyttäen. Lomake voidaan myös ladata "piilossa" sitä näyttämättä.

SDI -ikkunointimallisen ohjelman teko on helppoa, tarvitset vain lomakkeita ja näytät niitä. Teemme nyt esimerkin vuoksi SDI -ikkunointimallisen ohjelman joka koostuu kahdesta ikkunasta. Luo uusi Standard EXE -projekti ja lisää siihen yksi ikkuna, jolloin sinulla pitäisi olla kaksi ikkunaa kuten alla olevassa kuvassa on esitetty:

SDI -ikkunointimalli
SDI -ikkunointimalliesimerkki.

Lisää Form1:n Load -tapahtumaan seuraava ohjelmakoodi:

Private Sub Form_Load()
    Form2.Show
End Sub
Form1:n latautuessa ladataan samalla Form2 ja näytetään se samantien. Lopputuloksena molemmat ikkunat näkyvät näytöllä. Tämä on SDI -ikkunointimallin käyttöä. Ongelmana on se, että ikkunat ovat erillisiä ja käyttäjän voi olla hankala hahmottaa lomakkeiden kuuluvan samaan ohjelmaan. SDI -mallissa voit "ohjata" käyttäjää käyttämään tiettyä lomaketta asettamalla sen modaaliseksi. Seuraavaksi muutamme ohjelmakoodia siten, että Form2 näytetään modaalisena, joka pakottaa sulkemaan Form2:n jotta voisi nähdä/käyttää Form1:stä:
Private Sub Form_Load()
    Form2.Show vbModal
End Sub
Kuten ehkä huomasit, ainoa ero edelliseen ohjelmakoodiin on vbModal -parametri joka asettaa lomakkeen (Form2) näytettäväksi modaalisena eli muiden VB -lomakkeiden yläpuolella. Huomaa, että kyseessä ei ole systeemitason modaalisuus eli voit käyttää muita ohjelmia (ikkunoita) normaalisti. VB:ssä voi tehdä myös systeemitason modaalisen ikkunan mutta siihen pitää käyttää Windows API -kutsuja.

Yhteenvetona SDI:stä voisi todeta sen, että em. ikkunointimallia kannattaa käyttää pienissä, muutaman ikkunan sisältävissä ohjelmissa (projekteissa). Jos lomakkeiden määrä ylittää puolenkymmenen, kannattaa miettiä MDI -mallin käyttöönottoa.

MDI

MDI -malli perustuu siihen, että on yksi äitilomake (MDI) jonka sisällä voidaan esittää useampia lapsilomakkeita (MDI Child). Toki MDI -ohjelmassa voi sen lisäksi olla normaaleja SDI -ikkunointimallin mukaisia lomakkeita (joiden MDIChild -ominaisuuden arvo on False). Tehdäänpä esimerkin vuoksi MDI -ikkunointimallia toteuttava ohjelma jossa on myös SDI -mallin lomake. Tee uusi Standard EXE -projekti ja lisää siihen MDI Form -lomake. Nyt sinulla pitäisi olla Form1 (normaali SDI -ikkuna) ja MDIForm1 (MDI -ikkuna). Lisää kaksi Form:ia ja muuta niiden molempien MDI Child -ominaisuuden arvo True:ksi:

MDI -ikkunointimalli
MDI -ikkunointimalliesimerkki.

Lisää nyt MDIForm1:n Load -tapahtumaan seuraava ohjelmakoodi:

Private Sub MDIForm_Load()
    Form2.Show
    Form3.Show
End Sub
Käynnistä ohjelma ja - Form1 käynnistyy! Miksi? Form1 käynnistyy ensimmäisenä koska se on määritelty Project -valikon Project1 Properties -toiminnosta aukeavassa asetusikkunassa aloitusobjektiksi. Muuta aloitusobjektiksi MDIForm1 ja käynnistä ohjelma uudestaan. Kuten ehkä huomasit, MDIForm1:n sisään avautuu kaksi lomaketta Form2 ja Form3. Nämä ovat ns. lapsilomakkeita jotka toimivat äitilomakkeen sisällä. Muutetaanpa ohjelmakoodi seuraavanlaiseksi:
Private Sub MDIForm_Load()
    Form2.Show
    Form3.Show
    Form1.Show vbModal
End Sub
Nyt lataamme MDI -ikkunan kuten ennenkin ja sen sisään kaksi ikkunan (Form2 ja Form3). Tämän jälkeen lataamme (SDI -ikkunointimallin mukaisen) ikkunan Form1 (tällä kertaa modaalisena). Tuloksena meillä on samassa ohjelmassa molempia ikkunointimalleja käyttävä ohjelma.

MDI- ja SDI -ikkunointimallit
MDI- ja SDI -ikkunointimallit.

Ikkunoiden ominaisuudet

Kuten jo aikaisemmin todettiin, voimme vaikuttaa ikkunoiden ulkoasuun radikaalisti muutamaa ikkunan ominaisuutta muokkaamalla. Seuraavaksi käymme läpi muutaman ominaisuuden joiden avulla voit luoda hyvinkin erilaisia lomakkeita eri tilanteisiin. Normaalilomakkeet halutaan olla kooltaan säädettäviä, tällöin BorderStyle -ominaisuus kannattaa olla sellainen Sizable eli säädettävä. Jos taasen halutaan, että ikkunan kokoa ei voi muuttaa, kannattaa BorderStyle -ominaisuus olla Fixed.

BorderStyleSelite
0 - NoneIkkunalla ei ole reunuksia eikä myöskään ControlBox:ia, ikkunan paikkaa ei voi muuttaa. Kätevä jos haluat näyttää esim. kuvan.
1 - Fixed SingleIkkunalla on reunukset ja sulkupainike, ikkunan kokoa ei voi muuttaa. Voit lisätä ikkunan pienennys- ja koonmuutospainikkeet käyttämällä MinButton- ja MaxButton -ominaisuuksia.
2 - Sizable"Normaali" ikkuna, ikkunan kokoa voi muuttaa, sisältää kaikki ControlBox:n ominaisuudet (joita voi tosin ottaa pois käytöstä em. ominaisuutta muuttamalla).
3 - Fixed DialogKuten Fixed Single -ikkuna mutta et voi lisätä ikkunan pienennys- ja koonmuutospainikkeita.
4 - Fixed ToolWindowNäyttää ns. työkaluikkunan, joka ei näy alapalkissa eikä kokoa voi muuttaa. Ikkunan fonttikoko on pienempi.
5 - Sizable ToolWindowNäyttää ns. työkalurivin jonka koon voi muuttaa, ikkuna ei näy alapalkissa. Ikkunan fonttikoko on pienempi.

Huom! Voit lisätä tai poistaa (ikkunasta riippuen) ikkunan pienennys- ja koonmuutospainikkeita käyttämällä MaxButton ja MinButton -ominaisuuksia. ShowInTaskbar -ominaisuudella voit määrittää näkyykö lomake alapalkissa.

Tehdäänpä nyt esimerkin vuoksi ohjelma, joka käyttää em. ominaisuuksia. Luo uusi Standard EXE -projekti ja muuta lomakkeen BorderStyle -ominaisuuden arvoksi 4 - Fixed ToolWindow. Aseta ControlBox -ominaisuuden arvoksi False ja ShowInTaskbar -ominaisuuden arvoksi True. Tuloksena seuraavan näköinen ohjelma:

Työkaluikkuna
Työkaluikkuna.

Tehtävä 23