Komponenteista - luento 7
- Luentotaltiointi
- Yhteenveto komponenteista
- Pääteohjaus 3
- Kontrollien ulkoasun piirtäminen
- GDI (Graphics Device Interface)
- Lisätietoa
Jatketaan edelleen komponenttien parissa.
Luentotaltiointi
Ongelmia videon katselussa?luentoesimerkki (gdi.zip) huom. kaatuu eikä ole vielä korjattu. Keksiikö joku vian?
Yhteenveto komponenteista
- .NET-ympäristössä komponentin pitää toteuttaa System.ComponentModel.IComponent-rajapinta. Käytännössä komponentti peritään aina jostain valmiista luokasta, joka toteuttaa tämän.
- Komponentin rajapinta koostuu propertyista, metodeista ja tapahtumista.
- Useimpien propertyjen arvoja voidaan muuttaa Visual Studion designerilla. Visual Studio osaa tallentaa komponentin muuttuneen tilan.
- Komponentti aiheuttaa tapahtumia, jotka toimivat yleensä komponentin käyttämisen perustana.
- Komponentin toteutusta voidaan muuttaa mutta säilyttää rajapinta eikä käyttävä ohjelma huomaa mitään...
- Omia komponentteja voidaan kehitysympäristössä käyttää kuten valmiitakin. Komponentin toimintaan kehitystilassa voidaan vaikuttaa myös ohjelmallisesti.
- Dynaamisesti luodut komponentit täytyy muistaa lisätä halutun kontrollin sisään:
this.Controls.Add(tb);
- Validointi
- Validating-tapahtuma, kun kontrollista yritetään poistua
ja AutoValidate-ominaisuus == true.
Jos kontrollin sisällössä on ongelmaa niin e.Cancel = true ja jos kaikki on ok niin e.Cancel = false. Oletuksena kontrollista ei voi poistua ellei e.Cancel == false.
Jos asettaa EnablePreventFocusChange = true niin kontrollista pääsee pois vaikka se ei validoituisikaan.
- Validated-tapahtuma tapahtuu kun kontrollin oikeellisuustarkistus on mennyt ok eli e.Cancel = false
- Validating-tapahtuma, kun kontrollista yritetään poistua
ja AutoValidate-ominaisuus == true.
- Kontrollin omistaja ja parent
Kontrollin omistaja (owner) on kontrolli, joka on "vastuussa" kontrollista.
Kontrollin parent on kontrolli, jonka sisällä kyseinen kontrolli majailee. esim. textBox voi majailla panelin sisällä mutta textBoxin omistaja on kuitenkin ylemmällä tasolla oleva lomake (form).
FindForm-metodi etsii lomakkeen jolla kontrolli sijaitsee.
- Dispose-metodi hävittää kontrollin ja vapauttaa sen käyttämät resurssit.
Ilman Dispose-kutsua resurssit vapautetaan vasta kun roskienkeruu ehtii sen tehdä. Tätä voi nopeuttaa asettamalla objektin nulliksi.
Kontrollit, jotka sijaitsevat toisten kontrollien sisällä, saavat Dispose-kutsun automaattisesti äitikontrollinsa kuollessa.
Dispose-metodia voi kutsua vaikka sitä olisi kutsuttu jo aiemmin. no harm done.
IDisposable: What Your Mother Never Told You About Resource Deallocation
- Mikä kaataa Visual studion?
// kommentoitu versio kaataisi visual studion private string demoStringValue = null; public string DemoString { get { return this.demoStringValue; // return DemoString; } set { demoStringValue = value; // DemoString = value; } }Välillä Visual Studio ei suostu käyttämään komponentteja U:-asemalta vaan antaa herjauksen. Siirrä koko solution C:-asemalle.
Pääteohjaus 3
Pääteohjauksessa tuntui olevan ongelmia tapahtumien ja tarkistuksien käyttämisessä ja sijoittamisessa.
- Tarkistukset sijoitetaan omaan komponenttiin mukaanlukien ErrorProvider
- Oma komponentti esittelee delegaatin ja luo sitä vastaavan attribuutin (tapahtuman).
- Lomake jolla komponentti sijaitsee käsittelee komponentin lähettämän tapahtuman (jos haluaa).
Kontrollien ulkoasun piirtäminen
Kontrollin Paint-tapahtuma tapahtuu aina, kun kontrolli pitäisi piirtää uudelleen näytölle.
PaintEventArgs sisältää kahvan piirtämistä varten ja tiedon piirtoalueesta.
Kun uudelleenmäärittelet (override) OnPaint-metodin niin kutsu myös pääluokan OnPaint-metodia (base.OnPaint) paitsi jos piirrät koko piirtoalueelle.
Älä koskaan kutsu suoraan OnPaint-metodia vaan käytä Invalidate-metodia.
Piirtäminen onnistuu Graphic-luokalla.
GDI (Graphics Device Interface)
GDI+ mahdollistaa kaksiulotteisen grafiikan, kuvien ja tekstin piirtämisen.
Lisätietoa
- Windows Forms Controls FAQ
- Building Windows Forms Controls and Components with Rich Design-Time Features
- http://msdn.microsoft.com/en-us/library/1e430ef4.aspx
- http://msdn.microsoft.com/en-us/library/b818z6z6.aspx
- http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx
- http://msdn.microsoft.com/en-us/library/ms229628.aspx
- http://msdn.microsoft.com/en-us/library/system.windows.forms.control.paint.aspx
- http://msdn.microsoft.com/en-us/library/kxys6ytf.aspx
- http://msdn.microsoft.com/en-us/library/cksxshce.aspx
- http://msdn.microsoft.com/en-us/magazine/cc164159.aspx
- Double Buffered Graphics

Käyttäjien kommentit