Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

[MCAD.48] Velocemente, come creare un Control personalizzato

Come ho già avuto modo di dire precedentemente, ci sono diversi argomenti che ho tralasciato nella mia serie di articoli dedicati a MCAD. Uno di questi, la creazione di Windows Control, lo considero piuttosto importante (e, come al solito, piuttosto divertente), per cui ne parleremo oggi in modo magari un po' superficiale, ma più che sufficiente per superare l'esame 70-316.

Introduzione
Innanzitutto, cominciamo col dire che creare un controllo significa in altre parole implementare una classe che erediti da System.Windows.Forms.UserControl. Se utilizziamo l'editor Visual Studio .NET, possiamo cominciare un progetto Windows Control Library. L'editor ci propone in progettazione il classico Form Designer, ma con qualche differenza. In questo contesto non stiamo disegnando una WF, ma un Control, quindi non abbiamo ad esempio la barra del titolo ed altre caratteristiche proprie di una WF. Possiamo posizionare controlli, possiamo ancorarli, possiamo scrivere codice proprio come se stessimo implementando una form, quindi tenendo conto tutto quello che ci siamo detti negli articoli passati.

La grande differenza è che il controllo non vive di natura propria, ma deve venir ospitato in qualche container: nel più semplice dei casi, una Windows Form. Una volta compilato il progetto e generato l'assembly, possiamo aggiungerne l'icona nella ToolBox dell'IDE di VS.NET. Come? Abbiamo due possibilità:

  1. Clicchiamo con il pulsante destro, poi su "Add/Remove Items...", clicchiamo sul pulsante Browse e andiamo a selezionare l'assembly nella directory bin\Debug o bin\Release
  2. Stessa procedura, ma cominciando dal menù Tools dell'IDE

Quando l'icona è stata aggiunta nella ToolBox, il nostro controllo è a nostra completa disposizione. Io personalmente ho preferito aggiungere un nuovo progetto Windows Application alla soluzione corrente. In questo modo passo velocemente dal progetto Control al progetto che ospita il Control stesso. Più comodo di così!

Property personalizzate del nostro Control
Come tutte le classi, anche i Control possiedono properties che possono influenzarne il comportamento. Alcune di queste properties vengono ereditate dalla classe UserControl, altre ovviamente possiamo definirle noi a nostro piacimento in base alle necessità. Chi sviluppa con .NET da un po' di tempo, può sembrare normale, ma chi proviene da VB6, per esempio, troverà anche una piccola sorpresa. Mi spiego meglio.

Le property personalizzate appaiono automaticamente nella Property Window nel progetto in cui viene ospitato il Control stesso. Non solo: l'IDE è anche abbastanza intelligente: se la nostra property è definibile attraverso un public enum, allora nella Property Window comparirà la ComboBox che ci permette di dare un valore alla property semplicemente scegliendola tra i possibili valori. Ad esempio, se il mio Control possiede una property di tipo DrawingModeStyle che è un enum:

public enum DrawingModeStyle
{
    Happy = 0,
    Sad = 1,
    Angry = 2
}

Quando andrò a selezionare il Control sulla mia WF, la Property Windows mostrerà una cosa del genere:

Chi ha partecipato al Workshop di Luglio, sa benissimo come adattare la Property Windows ai nostri scopi. Usando gli attributi [Category], [Description], [Browseable] e tanti altri, possiamo regolare la nostra property DrawingMode come vogliamo.

Disegnare un nostro Control da zero
Questo è il caso più semplice, ovvero la costruzione di un Control "complesso" che comprende più Control e ne estende le funzionalità. .NET ci dà la possibilità di disegnare un controllo completamente da zero, usando tutte le classi incluse nel namespace System.Drawing. Il succo del discorso è quello di fare l'override dell'evento Paint del controllo di base, e disegnare quello che vogliamo.

Farò in tempo a parlarne meglio in un altro post?

powered by IMHO 1.2

Print | posted on mercoledì 19 ottobre 2005 16:22 | Filed Under [ MCAD ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET