Yksinkertaiset komponentit
Luodaan yksinkertainen oma komponentti.
- Yksinkertaiset komponentit (Youtube)
- tjlahton2012-02-08_1549.mp4 48.9 Mt
- tjlahton2012-02-08_1549.wmv 67.9 Mt
- tjlahton2012-02-08_1549.mp3 25.1 Mt
Komponentit
Hyvä ohje komponenteista löytyy artikkelista Architecture and Design of Windows Forms Custom Controls
- Komponenteilla saa jaettua ohjelmansa pienempiin osasiin ja modulaarisemmaksi.
- Komponentti on lähes sama asia kuin luokka
- Kapselointi
- Perintä
- Ohjelmointirajapinta
- Tila
- Introspection
- Persistence
- Pluggability
- IDE-yhteensopivuus
- Komponentin voi luoda kolmella tavalla
- "Tyhjästä" perimällä System.Windows.Forms.Control
- Perimällä olemassaolevasta kontrollista
- Koostamalla useammasta olemassaolevasta kontrollista (user control)
- Oman kontrollin (komponentin) luomisessa on seuraavat vaiheet:
- Luodaan kontrollista kirjasto (Windows Control Library)
- Määritellään ominaisuudet (properties)
- Ohjelmoidaan metodit
- Ohjelmoidaan tapahtumankäsittelijät
- Määritellään design tilan (Visual Studio) ominaisuudet
// propertyn properties-listauksen kustomointia [Category("Autolaskuri"), Description("Tähän autolaskurin kuvaus"), DefaultValue(0), Browsable(true)] public int Laskuri { get { return pLaskuri; } set { if (value >= 0) pLaskuri = value; } } // seuraavalla testataan onko komponentti design-moodissa // ei toimi kontrollin konstruktorissa eikä aina muulloinkaan... if (this.DesignMode) return;
Identifying the Run-Time and the Design Mode
Jos propertyn palautustyyppi on joku muu kuin merkkijono tai numero niin pitää määritellä kaksi lisäfunktiota jotka ovat muotoa:
// antaa propertylle sen oletusarvon Reset<propertyn_nimi> // vertaa annettua arvoa oletusarvoon ShouldSerialize<propertyn_nimi>
esimerkiksi
public void ResetOmaVari() { OmaVari = Color.Blue; } public bool ShouldSerializeOmaVari() { return OmaVari != Color.Blue; }
Omien kontrollien kaataessa Visual Studion on virheiden etsiminen todella hankalaa. Jotain vinkkiä saa artikkeleista: Good Way to Debug Visual Studio Designer Errors ja Debugging Design-Time Controls
Luokan nimi ei saa olla sama kuin namespace
kun luotte omia komponentteja niin varmistakaa, että Visual studio ei nimeä luokkaa (class) samalle nimelle kuin nimiavaruus (namespace) jossa luokka sijaitsee. Ei siis näin:
namespace Ajastin { public partial class Ajastin : Timer vaan vaikka näin: namespace Ajastin { public partial class AjastinControl : Timer
Jos luokka ja nimiavaruus ovat samalla nimellä niin tuloksena on ongelmia.
Microsoftin Framework Design Guidelines kertovat tarkemmin miten asioita pitää tehdä
- Do not name a class the same as its namespace, Part One
- Do not name a class the same as its namespace, Part Two
Lisätietoa
- Creating a Custom Control Derived from a TextBox Control
- WinForms Data Validation
- Architecture and Design of Windows Forms Custom Controls
- Extending Windows Forms with a Custom Validation Component Library
- Custom Controls in Visual C# .NET
- How to: Test the Run-Time Behavior of a UserControl
- How to: Inherit from Existing Windows Forms Controls
- How to: Inherit from the UserControl Class
- How to: Author Controls for Windows Forms
- Control Type Recommendations
- Varieties of Custom Controls
- How to: Create a Windows Forms Control That Takes Advantage of Design-Time Features
- How to: Display a Control in the Choose Toolbox Items Dialog Box
- Walkthrough: Creating a Windows Forms Control That Takes Advantage of Visual Studio Design-Time Features
- Custom Design-time Control Features in Visual Studio .NET
- Building Windows Forms Controls and Components with Rich Design-Time Features
- Creating a Windows Form User Control
- Identifying the Run-Time and the Design Mode
- User Controls Custom Properties
Käyttäjien kommentit