Virheentarkistukset ja yksinkertaiset komponentit - Pääteohjaus 2
Tehdään lomakkeelle virheentarkistus sekä luodaan ensimmäinen oma yksinkertainen komponentti.
Lisäapua tehtäviin antavat luento 5 ja luento 6.
Lisäksi voit tutustua komponenttien tekemiseen lukemalla erinomaisen artikkelin: Architecture and Design of Windows Forms Custom Controls
Virheentarkistukset
Luodaan uusi yksinkertainen tekstikenttäkomponentti, joka osaa tarkistaa siihen syötetyn luvun kelvollisuuden
- Luo Visual Studiolla uusi projekti ja Solution mutta älä valitse tyypiksi Windows Forms vaan Windows Forms Control Library. Keksi kuvaava nimi esim. PositiveTextBox
- Nimeä Solution Explorerista usercontrol1.cs samalle nimelle kuin projektisi eli esim. PositiveTextBox. Anna Visual Studion uudelleennimetä kaikki muukin tarpeellinen.
- Peri komponenttisi TextBox-luokasta äläkä valmiina tarjotusta UserControl-luokasta
- Yritä kääntää komponenttisi (F6). Saat läjän virheilmoituksia. Poista rivit, jotka aiheuttavat virheen. Käännä uudelleen.
- Lisää solutioniin uusi projekti, jonka tyyppi on nyt Windows Forms Application. Anna nimeksi vaikkapa Testipenkki.
- Lisää testipenkin lomakkeelle uusi komponenttisi, jonka pitäisi löytyä Toolboxista jos vain sait komponentin käännettyä. Jos komponentti ei ilmesty toolboxiin niin varmista, että komponenttisi on käännetty. Jos vieläkään ei näy niin tarkista, että seuraa asetus on True: Tools|Options|Windows Forms Designer|General|Toolbox|AutoToolboxPopulate
- Yritä suorittaa testipenkki. Jos sait virheilmoituksen niin varmista, että testipenkki on oletuksena käännettävä projekti (Set as Startup Project)
- Määrittele komponentissasi Validating-tapahtuma, joka suoritetaan aina, kun tekstikentän tekstikentästä yritetään poistua. Tapahtuma löytyy ihan normaalisti komponenttisi tapahtumalistauksesta. Lisää metodiin tarkistus, joka tutkii onko kenttään syötetty positiivinen numero. Jos luku ei ole positiivinen niin aseta e.Cancel = true, joka tarkoittaa, että syöte ei ollut kelvollinen.
- Lisää komponenttiisi ErrorProvider. Aseta ErrorProviderilla komponenttisi viereen virheikoni ja virheteksti aina jos syötetty luku on epäkelpo (Validating-tapahtumassa).
- Lisää testipenkkiisi myös painike tai joku muu kontrolli niin voit testata tekstikentästäsi poistumista ja ErrorProvideria, kun aktivoit lomakkeelta jonkun muun kontrollin.
- Lisää komponenttiisi Validated-tapahtuma, joka tapahtuu aina, kun kentän syöte on kelvollinen. Poista Validated-tapahtumassa ErrorProvider näkyvistä asettamalla virheteksti tyhjäksi.
- Kokeile nyt häviääkö ja ilmestyykö virheikoni aina tarpeen mukaan.
- Testaa mitä vaikuttaa virhetarkistuksien toimintaan, kun muutat lomakkeen AutoValidate-ominaisuuden arvoja. Eri vaihtoehtojen merkitys on selitetty luentomateriaalissa.
- Lisää lomakkeellesi useampi PositiveTextBox-kenttä. Muuta virheentarkistus toimimaan siten, että kaikkien kenttien virheet (ValidateChildren) tarkistetaan vasta, kun lomaketta yritetään sulkea.
- Lisää lomakkeelle myös OK-painike jolla lomakkeen voi sulkea jos kentissä ei ole virheellisiä syötteitä. Huomioi myös lomakkeen sulkeminen ruksista!
Tapahtumat
Luo uusi komponentti PalindromiTextBox, jonka perit TextBox-luokasta. Uusi komponentti kelpuuttaa syötteeksi vain kirjaimia eli numerot ja erikoismerkit eivät kelpaa. Lisäksi komponentti osaa ilmoittaa milloin siihen syötetty merkkijono on palindromi. Mallia voit katsoa luennolta.
- Luo komponentti ja tee siihen aiemmin tehtyyn tapaan toimivat tarkistukset
- Lisää komponenttiisi tapahtuma, joka suoritetaan jos kenttään syötetään
palindromi. Määrittele sopiva delegaattityyppi ja esittele sellainen esim:
public delegate void PalindromiHandler(); public event PalindromiHandler Palindromi;
- Kutsu Palindromi()-funktiota silloin kun syötetty teksti on palindromi. Huom. varmista, että Palindromi on määritelty ennen kutsumista.
- Käännä komponentti uudelleen (rebuild). Kokeile komponenttia testipenkissä.
Komponenttisi tapahtumalistasta pitäisi löytyä nyt tapahtuma Palindromi.
Lisää Palindromi-tapahtumaan jotain millä voit testata toimiiko komponenttisi tapahtuma esim:
MessageBox.Show ("Syötit palindromin!", "Testipenkki", MessageBoxButtons.OK);
Nyt lomake saa aina tiedon kentän virhesyötteestä ja voi sen perusteella reagoida asiaan tai olla reagoimatta.
Propertyt
- Luo uusi komponentti LukuvaliTextBox, joka kelpuuttaa syötteeksi vain kokonaislukuja halutulta väliltä esim. 0 - 10.
- Rakenna komponenttiin syötteentarkistukset edellätehtyyn tapaan
- Lisää luokkaan kaksi propertyä min ja max joilla voi suoraan visual studiossa määrätä kelpaavaan lukuvälin.
- Aseta uusille propertyille oikeanlainen avustus ym. Vinkkiä saat dokumentista: User Controls Custom Properties
Lisätietoa
- Design-Time Integration of Windows Forms Components
- AutoValidate Enumeration
- Validation in Windows Forms
- Building Windows Forms Controls and Components with Rich Design-Time Features
- Defining Default Values with the ShouldSerialize and Reset Methods
- Behaviour
- User Input Validation in Windows Forms
- Extending Windows Forms with a Custom Validation Component Library
- WinForms Data Validation
- ErrorProvider Class
- Lesson 14: Introduction to Delegates and Events
Käyttäjien kommentit