Yksinkertaiset komponentit

Luodaan yksinkertainen oma komponentti.

Komponentit

Luentoesimerkki (luento.zip)

Hyvä ohje komponenteista löytyy artikkelista Architecture and Design of Windows Forms Custom Controls

// 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ä

Lisätietoa

Käyttäjien kommentit

Kommentoi Lisää kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/gko/luennot/luento5/
© Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
2016-01-13 18:19:13
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta