Design-Time: Components, Control e funzionalità del design-time

Prima di iniziare la realizzazione di in "custom control" torniamo un attimo alle due famiglie di classi che si possono utilizzare come base di partenza e come accedere alle funzionalità del design-time.

Componets

Component è una classe che implementa l'interfaccia IComponent pertanto ereditando da questa classe avremo un componente con la proprietà Site ed il metodo Dispose già pronte per l'utilizzo poiché già implementate nella classe base. La classe Component, quindi, è quella che si offre meglio come punto di partenza per la realizzazione di un componente.

componentClassView

Immagine 1

La Proprietà Site, di tipo ISite viene impostata automaticamente dal designer host al momento in cui noi trasciniamo il nostro componente sulla Form, così come la proprietà Container (cioè il controllo su cui viene trascinato) del nostro componente e ci permette di utilizzare la proprietà DesignMode di cui si parlava sopra.

Come potete vedere dall'immagine 1 il nostro componente offre le funzionalità necessarie per poter colloquiare con il design-time ma non incorpora le comuni proprietà e metodi che ci permettono di interagire con esso, quelle cioè che troviamo in un controllo windows forms quali, ad esempio, BackColor, Text, ForeColor, etc. Queste le dovremo implementare noi scrivendo il relativo codice.

Un Component ha queste caratteristiche perché in .Net esso nasce con lo scopo di essere utilizzato come componente ospitato nella cosiddetta "Nonvisual Design Surface" o Component Tray.

component-tray

Immagine 2 - Component Tray -

Controls

Se volgiamo partire da una classe che implementi già proprietà e metodi che ci permettono di interagire con l'interfaccia grafica, dovremo ereditare da una delle classi che si trovano sotto il namespace System.Windows.Forms.

· Control: offre le basi per creare un controllo;

· ScrollableControl: come Control ma implementa anche la gestione delle barre di scorrimento;

· ContainerControl: Eredita da ScrollableControl e funge da controllo contenitore di altri oggetti;

· UserControl: Allo stesso livello di una Form, eredita da ContainerControl.

Queste classi implementano tutte le funzionalità necessarie per la creazione di un controllo personalizzato come le comuni proprietà (BackColor, Text, Size etc.) ed i metodi (OnPaint, OnClick, MouseOver, etc) e vengono visualizzate nella zona che in Visual Studio è denominata "Visual Design Surface" (quella dove vediamo la form in fase di progettazione). Inoltre ci permettono di interagire con il designer host poiché indirettamente implementano l'interfaccia IComponent.

Funzionalità del Design-Time

Possiamo accedere alle funzionalità del design-time in due modi: programmaticamente o in modo dichiarativo.

Programmaticamente: quando usiamo il codice per valutare se ci troviamo in fase di design-time . Ad esempio possiamo utilizzare la proprietà DesignMode per ottenere un valore booleano (true o false) che indica se ci troviamo in design-time (true) o run-time (false).

public void Paint()

{

if (DesignMode)

{

//disegna e colora

return;

}

//Disegna solo la cornice dell'oggetto

}

Questo perché in fase di design-time alcune funzionalità di un oggetto devono differire da quando siamo in run-time, come ad esempio la proprietà visible. In fase di disegno dell'oggetto questa deve essere ignorata altrimenti il nostro oggetto non sarebbe visibile sul "visual design surface", mentre in run-time deve essere valutata.

In modo dichiarativo: Elementi fondamentali nella gestione del design-time sono gli attributi. Per poter implementare determinate funzionalità ai nostri controlli dovremo usare quelli già presenti nel Framework o crearne nuovi ereditando da classi già create appositamente per il tipo di servizio che ci occorre.

[Description("Restituisce il valore della proprietà")]

[Category("Dati")]

public int Value

{

get { return value; }

set { avalue = value; }

}

Grazie all'utilizzo di questi attributi, come visibile nell'immagine 3, quando visualizziamo in nostro controllo nella finestra delle proprietà, la proprietà Value avrà la descrizione fornita e farà parte della categoria Dati.

propertyWin_Attribute

Immagine 3

Per ora mi fermo qui.

Nel prossimo articolo inizierò lo sviluppo di un controllo personalizzato implementando le funzionalità del design-time.

Ciao.


Prima parte

Print | posted on Friday, March 9, 2007 6:34 PM

Comments have been closed on this topic.