mercoledì 26 aprile 2017   
  Cerca  
 
Registrazione  Login  
Projects » .NET » VS2008 - CustomComponents (VB.NET+C#)  
   Download Riduci  
     
  
   Custom components Riduci  

CTextBox: un textbox personalizzato.

Chi ha utilizzato il multi-casting in VB6.0 (vedi mio progetto Multicasting qui) si chiederà come sia possibile ottenere le stesse funzionalità anche in VB.NET.
Ebbene, grazie all'erederiatà implementata in VB.NET si può fare esattamente la stessa cosa, anzi di più, e meglio.

A scanso di equivoci, per i non informati riguardo al multi-casting, voglio precisare che non mi riferisco alla creazione di un controllo utente, bensì alla creazione di un componente personalizzato che eredita le stesse caratteristiche del controllo base ma in cui possiamo aggiungere nuove funzionalità.

Il multi-casting realizzabile in VB 6.0, seppure comodissimo, permette però 'solamente' di 'agganciare' gli eventi, mentre in VB.NET possiamo addirittura creare proprietà personalizzate.
Direi che per uno sviluppatore è facile comprendere come tutto ciò apra un nuovo mondo.

Crea un componente personalizzato è piuttoto semplice: 
- Fate clic sul menu Progetto -> Aggiungi componente... 
- Dalla finestra Aggiungi nuovo elemento sarà selezionato il modello Classe Component
- Nella casella di testo il nome proposto sarà Component1.vb

Indicate il nome che volete dare al vostro componente (nel caso specifico io ho dato CTextBox, C sta per custom).

Premete Aggiungi per aggiungere il componente al progetto (osservate l'icona del file in Esplora soluzioni).
Consiglio di aggiungere alla classe la direttiva

Imports System.ComponentModel

Così potrete 'decorare' le vostre proprietà assegnadovi Categoria e Descrizione (vedi Figura 3); ad esempio la mia proprietà DefaultText è decorata così:

<Category("Custom"), Description("Se la proprietà Text è vuota visualizza un testo predefinito.")> _

La prima, Category, consentirà a Visual Studio di raggruppare le vostre proprietà quando impostate la visualizzazione 'per Categoria', mentre la Description sarà visualizzata nel riquadro dell informazioni quando selezionate la proprietà nella finestra omonima (Figura 4).

 Per il resto , l'inserimento del codice avviene nelle solite modalità quindi più che discuterne è preferibile consultare il codice sorgente.

Il componente CTextBox presentato in questo progetto ha, rispetto al controllo base, le seguenti caratteristiche:

  1. Proprietà DefaultText - Visualizza un testo predefinito, nel caso il textbox sia vuoto
    Sono certo che avete già visto 'da qualche parte' questa funzionalità, in cui le caselle di testo, nell'attesa che l'utente inserisca le proprie informazioni, mostrano una stringa predefinita, in colore grigio, che suggerisce all'utente cosa deve inserire.
    Nei campi di testo cosidetti obbligatori, si potrebbe indicare tra parentesi anche la stringa "(obbligatorio)", es. Ragione Sociale (obbligatoria) in modo che l'utente sappia quali campi sono necessari per poter registrare il nuovo record.
    Ovviamente, ogni controllo deve consentire di indicare una stringa differente a seconda del tipo di informazione venga richiesta nel campo.
    .
  2. Proprietà DefaultTextColor - Imposta il colore per il testo della proprietà DefaultText
    Come scritto sopra, possiamo impostare anche un colore predefinito che sarà utilizzato per mostrare il DefaultText di ogni singolo controllo. 
    Ad esempio, nei campi di testo cosidetti obbligatori, si potrebbe usare un colore differente, come il rosso oppure il blu (sempre meglio usare colori 'chiari').
    Quando l'utente inserisce il proprio valore, il testo sarà mostrato nel colore di sistema predefinito. 
    .
  3. Proprietà Highlight - (Boolean)
    Imposta o restituisce se il controllo deve visualizzare un bordo colorato quando diventa attivo.
    Il colore predefinito è Color.Red, ma può essere impostato tramite la proprietà HighlightColor.
    Quando il controllo perde lo stato attivo, il bordo sparisce.
    .
  4. Proprietà HighlightColor - (Color)
    Imposta o restituisce il colore del rettangolo di selezione.
    Anche qui, come visto precedentemente, si potrebbe usare un colore differente a seconda che il campo sia obbligatorio o meno.
    Se la proprietà Highlight è impostata su False il bordo non sarà visualizzato.
    .
  5. Proprietà SelectedBackColor - (Color)
    Imposta o restituisce il colore di sfondo utilizzato dal controllo quando diventaa attivo.
    Il colore predefinito è quello di sistema per lo sfondo della finestra (SystemColors.Window).
    Anche qui, come sopra, si potrebbe usare un colore differente a seconda che il campo sia obbligatorio o meno.
    Quando il controllo perde lo stato attivo sarà ripristinato il colore di sistema.
    .

A parte le nuove proprietà, si tenga presente che il tutto è gestito negli eventi standard a cui ho aggiunto ulteriore codice per implementare le nuove caratteristiche (vedi Figura 2).

  1. Quando il controllo riceve il focus:
    - il testo predefinito sparisce
    - lo sfondo assume un colore diverso
  2. - per sportarsi da un controllo all'altro possiamo premere sia il tasto TAB che il tasto INVIO.
    - se si preme INVIO viene intercettato ed annullato il fastidioso beep
  3. Quando il controllo perde il focus:
    - se la casella viene lasciata vuota riappare il testo predefinito, colorato con il DefaultTextColor
    - se il testo è stato modificato, il colore del testo viene impostato al valore di default
    - lo sfondo torna al colore di default

Ovviamente è possibile espandere le caratteristiche aggiungendo nuove proprietà e funzionalità, questo è solo un semplice esempio da cui prendere spunto.

 

     
  
   ScreenShoots Riduci  


Figura 1


Figura 2


Figura 3


Figura 4 - Finestra Proprietà

 

 

     
 Stampa   
DotNetNuke® is copyright 2002-2017 by DotNetNuke Corporation