Komponentit ja tapahtumat - Viikkotehtävä 2
Tee seuraavista haluamasi tehtävä käyttäen Visual Studiota (tai vastaavaa) ja Windows Formsia. Ohjelma ei saa kaatua esim. virheellisten syötteiden takia.
Oikeellisuustarkistukset on tehtävä käyttäen oikealla tavalla Validating- ja Validated-tapahtumia.
Ohjelma ei saa kaatua.
Tämän viikkotehtävän tekeminen edellyttää vähintään seuraavien luentojen katsomista ja pääteohjaustehtävän tekemistä:
- Delegaatit ja tapahtumat
- Yksinkertaiset komponentit
- Oikeellisuustarkistukset
- Lisäesimerkki delegaateista
- Lisäesimerkki validoinnista
- Pääteohjaus 2 - Yksinkertaiset komponentit ja syötteen validointi
Taso 1
Kirjoita ohjelma, joka laskee kilometrinopeuden
Luo oma itsenäinen komponentti NumberTextBox, peri TextBox-luokasta. Komponentin on sellaisenaan toimittava muissakin ohjelmissa.
- Komponenttisi kelpuuttaa desimaaliluvun halutulta väliltä. Väli annetaan komponentille propertyjen (min ja max) avulla. Kelpuuttaa esim. luvut 10,0 tai 150,55 tai 30 jne.
- Jos syöte on epäkelpo niin se osoitetaan ErrorProvider-luokan avulla.
Ohjelmassa on kaksi syöttökenttää. Käytä molemmissa omaa komponenttiasi. Toiseen syötetään ajetut kilometrit desimaalilukuna. Kelvollinen väli on > 0 km ja < 1000 km. Toiseen syötetään käytetty aika tunteina desimaalilukuna. Kelvollinen väli on > 0 tuntia ja < 24 tuntia. Esim. 135,5 km ja 1,7 tuntia.
Oikeellisuustarkistukset on tehtävä käyttäen oikealla tavalla Validating- ja Validated-tapahtumia. Jos syötetyt arvot eivät ole kelvollisia niin Laske-painike pitää olla disabloituna.
Jos kenttiin on syötetty kelvolliset arvot niin Laske -painike laskee komponenttien avulla lomakkeelle kilometrinopeuden.
Ohjelma ilmoittaa kilometrinopeuden (km/h) kahden desimaalin tarkkuudella.
Vinkki: Form.ValidateChildren
Taso 3
Kirjoita ohjelma, joka laskee treeniin käytetyn ajan ja matkan perusteella treenin vauhdin minuutteina / km.
Luo ohjelma omilla komponenteilla. Tee seuraavat komponentit:
- TimeTextBox, peri TextBox-luokasta - kelpuuttaa ajanjakson muodossa hh:mm:ss (tunnit:minuutit:sekunnit). Esim. 01:10:30 tai 2:11:00 tai 0:35:1 Jos syöte on epäkelpo niin se osoitetaan ErrorProvider-luokan avulla ja värjäämällä syöttökentän taustaväri punaiseksi. Syötteen maksimi on 23:59:59. Käytä syötteen parsintaan TimeSpan-luokkaa.
- NumberTextBox, käytä taso 1:llä tekemääsi luokkaa. Jos syöte on epäkelpo niin se osoitetaan ErrorProvider-luokan avulla ja värjäämällä syöttökentän taustaväri punaiseksi.
- PaceLabel, peri Label-luokasta.
- Sisältää ominaisuudet (propertyt) time ja distance. Time-property on TimeSpan-tyyppiä. ja Distance-property on desimaaliluku (double).
- Esittää vauhdin (pace, minuuttia / km ) yhden desimaalin tarkkuudella.
- Jos vauhti on < 5 min / km niin PaceLabel aiheuttaa tapahtuman Fast.
- Jos vauhti on >= 5 min / km mutta alle 7 min / km niin PaceLabel aiheuttaa tapahtuman Average
- Jos vauhti on >= 7 min / km niin PaceLabel aiheuttaa tapahtuman Slow
- Edellä luetellut tapahtumien raja-arvot määritellään FastMin- ja SlowMin-nimisten propertyjen avulla. Average on näiden välissä oleva alue.
- Laskee automaattisesti näkyville vauhdin aina kun muutetaan time- tai distance-propertyjen arvoja. Jos Time- tai Distance ovat <= 0 niin laskun tulos on 0.
- TimeTextBoxin ja NumberTextBoxin oikeellisuustarkistukset on tehtävä käyttäen oikealla tavalla Validating- ja Validated-tapahtumia. PaceLabelissa ei voi käyttää näitä. PaceLabelissa ei käytetä oikeellisuustarkistuksia.
- Jos kenttiin on syötetty kelvolliset arvot niin Laske -painike laskee komponenttien avulla lomakkeelle näkyviin myös kilometrinopeuden (vrt. taso 1). Jos arvot eivät ole kelvolliset niin Laske-painikkeen on oltava epäaktiivisena.
- Lomake kuuntelee PaceLabelin tapahtumia. Lomake muuttaa tapahtumien perusteella taustavärinsä punaiseksi (Fast), keltaiseksi (Average) tai vihreäksi (Slow).
Vinkki: C# in depth: Delegates and Events
Taso 5
Laajenna tason 3 -ohjelmaa seuraavilla ominaisuuksilla:
- Mahdollista useamman treenin syöttäminen. Treenejä (aika ja matka) pitää pystyä syöttämään ennalta tuntematon määrä. Lomakkeelle täytyy syntyä uusia syöttökenttiä automaattisesti aina tarpeen mukaan. Ts. aina pitää olla näkyvissä yksi muokkaamaton treeni. Jo syötettyjä treenejä täytyy pystyä muuttamaan ja myös helposti poistamaan. Jokaisen syötetyn treenin vieressä täytyy näkyä PaceLabelin avulla laskettu vauhti.
- Laajenna PaceLabelia siten, että sillä on myös FastColor, AverageColor- ja SlowColor-nimiset propertyt joilla voi asettaa eri nopeuksiin liittyvät värit. Eri tapahtumien yhteydessä PaceLabel palauttaa tapahtuman mukana myös värin. PaceLabel muuttaa oman taustavärinsä näiden tapahtumien perusteella eli kuuntelee omia tapahtumiaan.
- Luo SpeedLabel, peri PaceLabel-luokasta - SpeedLabel laskee automaattisesti mikä on kilometrinopeus (speed) ja asettaa sen näkyväksi tekstikseen yhden desimaalin tarkkuudella. SpeedLabel aiheuttaa tapahtuman Fast jos nopeus on yli 15 km/h, tapahtuman Slow jos nopeus on alle 6 km/h ja tapahtuman Average jos nopeus on kahden edellisen väliltä. Käytä tasolla kolme luomiasi propertyja.
- Jokaisen syötetyn treenin vieressä täytyy näkyä SpeedLabelin avulla laskettu kilometrinopeus.
- Ohjelma laskee lomakkeelle myös kaikkien treenien yhteiskeston, kokonaismatkan ja näistä lasketun vauhdin ja nopeuden
- Kaikki lomakkeella näkyvät tiedot lasketaan automaattisesti heti tietojen syöttämisen / muuttamisen jälkeen. Mitään erillisiä Laske-painikkeita tms. ei pidä käyttää. Toteuta käyttäen komponenttiesi tapahtumia.

Käyttäjien kommentit