Tipi di controlli personalizzati

Con .NET Framework è possibile sviluppare e implementare nuovi controlli. Si possono estendere le funzionalità del controllo utente con cui si ha dimestichezza nonché dei controlli esistenti attraverso l'ereditarietà. È anche possibile scrivere controlli personalizzati che eseguono il proprio disegno.

Decidere quale tipo di controllo creare può generare confusione. In questo argomento vengono evidenziate le differenze tra i vari tipi di controlli da cui è possibile ereditare e sono riportate informazioni su come scegliere un particolare tipo di controllo per il progetto.

Nota

Per informazioni sulla creazione di un controllo da usare nei Web Form, vedere Sviluppo di controlli server ASP.NET personalizzati.

Classe di base del controllo

La Control classe è la classe base per i controlli Windows Form. Offre l'infrastruttura necessaria per la visualizzazione nelle applicazioni Windows Form.

La Control classe esegue le attività seguenti per fornire la visualizzazione visiva nelle applicazioni Windows Form:

  • Espone un handle di finestra.

  • Gestisce il routing dei messaggi.

  • Genera gli eventi di mouse e tastiera e molti altri eventi dell'interfaccia utente.

  • Genera le funzionalità di layout avanzate.

  • Contiene molte proprietà specifiche della visualizzazione visiva, ad esempio ForeColor, BackColor, Heighte Width.

  • Offre la protezione e il supporto del threading necessari affinché un controllo Windows Form funzioni come un controllo Microsoft® ActiveX®.

Poiché gran parte dell'infrastruttura viene definita dalla classe di base, è relativamente semplice sviluppare i propri controlli Windows Form.

Tipi di controlli

Windows Form supporta tre tipi di controlli definiti dall'utente: composito, esteso e personalizzato. Le sezioni seguenti descrivono ogni tipo di controllo e contengono suggerimenti utili per la scelta del tipo di controllo da usare nei propri progetti.

Controlli compositi

Un controllo composito è una raccolta di controlli Windows Form incapsulata in un contenitore comune. Questo tipo di controllo viene talvolta definito controllo utente. I controlli contenuti vengono chiamati controlli costitutivi.

Un controllo composito include tutte le funzionalità intrinseche associate a ogni controllo Windows Form contenuto e consente di esporre e associare in modo selettivo le relative proprietà. Un controllo composito mette inoltre a disposizione numerose funzionalità predefinite di gestione della tastiera senza richiedere ulteriori operazioni di sviluppo.

Ad esempio, un controllo composito potrebbe essere compilato per visualizzare i dati dell'indirizzo del cliente da un database. Questo controllo può includere un DataGridView controllo per visualizzare i campi del database, un BindingSource oggetto per gestire l'associazione a un'origine dati e un BindingNavigator controllo da spostare tra i record. È possibile esporre le proprietà di data binding in modo selettivo, nonché includere l'intero controllo in un pacchetto e riusarlo nelle diverse applicazioni. Per un esempio di questo tipo di controllo composito, vedere Procedura: Applicare attributi nei controlli Windows Form.

Per creare un controllo composito, derivare dalla UserControl classe . La UserControl classe base fornisce il routing tramite tastiera per i controlli figlio e consente ai controlli figlio di funzionare come gruppo. Per altre informazioni, vedere Sviluppo di un controllo Windows Form composito.

Consiglio

Ereditare dalla classe UserControl per:

  • Combinare le funzionalità di vari controlli di Windows Form in una singola unità riusabile.

Controlli estesi

È possibile derivare un controllo ereditato da un controllo di Windows Form esistente. Questo approccio consente di mantenere tutte le funzionalità intrinseche di un controllo Windows Form e di estenderle aggiungendo proprietà personalizzate, metodi o altre funzionalità. Con questa opzione è possibile eseguire l'override della logica di disegno del controllo di base e quindi estendere la relativa interfaccia utente modificandone l'aspetto.

Ad esempio, è possibile creare un controllo derivato dal controllo che tiene traccia del Button numero di volte in cui un utente ha fatto clic su di esso.

In alcuni controlli è anche possibile aggiungere un aspetto personalizzato all'interfaccia utente grafica del controllo eseguendo l'override del OnPaint metodo della classe di base. Per un pulsante esteso che tiene traccia dei clic, è possibile eseguire l'override del OnPaint metodo per chiamare l'implementazione di base di OnPainte quindi disegnare il conteggio dei clic in un angolo dell'area Button client del controllo.

Consiglio

Ereditare da un controllo di Windows Form se:

  • Molte delle funzionalità necessarie sono identiche a quelle incluse in un controllo di Windows Form esistente.

  • Non è necessaria un'interfaccia utente grafica personalizzata oppure si vuole progettare una nuova interfaccia utente grafica per un controllo esistente.

Controlli personalizzati

Un altro modo per creare un controllo consiste nel crearne uno sostanzialmente dall'inizio ereditando da Control. La Control classe fornisce tutte le funzionalità di base richieste dai controlli, inclusi gli eventi di gestione del mouse e della tastiera, ma nessuna funzionalità o interfaccia grafica specifica del controllo.

La creazione di un controllo ereditando dalla Control classe richiede molto più pensiero e impegno rispetto all'ereditarietà di UserControl o a un controllo Windows Form esistente. Poiché gran parte dell'implementazione spetta all'utente, il controllo può avere maggiore flessibilità rispetto a un controllo composito o esteso ed è possibile personalizzarlo in modo da soddisfare le esigenze specifiche.

Per implementare un controllo personalizzato, è necessario scrivere codice per l'evento OnPaint del controllo, nonché qualsiasi codice specifico della funzionalità necessario. È anche possibile eseguire l'override del WndProc metodo e gestire direttamente i messaggi di Windows. Questo è il modo più potente di creare un controllo, ma per usare questa tecnica in modo efficace, è necessario avere familiarità con l'API Microsoft Win32®.

Un esempio di controllo personalizzato è un controllo clock che duplica l'aspetto e il funzionamento di un orologio analogico. Il disegno personalizzato viene richiamato per fare in modo che le mani dell'orologio si spostino in risposta agli Tick eventi da un componente interno Timer . Per altre informazioni, vedere Procedura: Sviluppare un controllo di Windows Form semplice.

Consiglio

Ereditare dalla classe Control per:

  • Fornire una rappresentazione grafica personalizzata del controllo.

  • È necessario implementare una funzionalità personalizzata non disponibile tramite i controlli standard.

Controlli ActiveX

Anche se l'infrastruttura di Windows Form è stata ottimizzata per ospitare i controlli Windows Form, è comunque possibile usare i controlli ActiveX. Questa attività è supportata in Visual Studio. Per altre informazioni, vedere Procedura: Aggiungere i controlli ActiveX a Windows Form.

Controlli senza finestra

Le tecnologie Microsoft Visual Basic® 6.0 e ActiveX supportano i controlli senza finestra. I controlli senza finestra non sono supportati in Windows Form.

Esperienza di progettazione personalizzata

Se è necessario implementare una soluzione personalizzata in fase di progettazione, è possibile creare una propria finestra di progettazione. Per i controlli compositi, derivare la classe della finestra di progettazione personalizzata dalle ParentControlDesigner classi o DocumentDesigner . Per i controlli estesi e personalizzati, derivare la classe della ControlDesigner finestra di progettazione personalizzata dalla classe .

DesignerAttribute Utilizzare per associare il controllo alla finestra di progettazione. Per altre informazioni, vedere Estensione del supporto in fase di progettazione e Procedura: Creare un controllo Windows Form che utilizza le funzionalità di progettazione.

Vedi anche