Condividi tramite


Tipi di controlli personalizzati

Con .NET Framework è possibile sviluppare e implementare nuovi controlli. È possibile estendere la funzionalità dei controlli utente più comuni nonché dei controlli esistenti mediante ereditarietà. È inoltre possibile scrivere controlli personalizzati che effettuano il proprio disegno.

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

Nota

Per ulteriori informazioni sulla modifica di un controllo da utilizzare in Web Form, vedere Sviluppo di controlli server ASP.NET personalizzati.

Classe base dei controlli

Control è la classe base per i controlli di Windows Form e fornisce l'infrastruttura necessaria per la visualizzazione nelle applicazioni Windows Form.

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

  • Espone un handle di finestra.

  • Gestisce il routing dei messaggi.

  • Fornisce eventi di mouse e tastiera e molti altri eventi dell'interfaccia.

  • Fornisce funzioni avanzate di layout.

  • Contiene numerose proprietà specifiche per la visualizzazione, quali ForeColor, BackColor, Height eWidth.

  • Fornisce il supporto per sicurezza e threading necessario affinché un controllo di Windows Form funzioni come un controllo Microsoft® ActiveX®.

Dal momento che una parte così consistente dell'infrastruttura è fornita dalla classe base, è relativamente semplice sviluppare controlli Windows Form personalizzati.

Tipi di controllo

Windows Form supporta tre tipi di controllo definiti dall'utente: composito, esteso e personalizzato. Nelle sezioni seguenti viene descritto ciascun tipo di controllo e vengono forniti suggerimenti per la scelta del tipo più adeguato a un progetto specifico.

Controlli compositi

Un controllo composito è un insieme di controlli di Windows Form incapsulati in un contenitore comune. Questo tipo di controllo viene talvolta definito controllo utente, mentre i controlli contenuti vengono definiti controlli costitutivi.

Il controllo composito contiene tutta la funzionalità inerente associata a ciascuno dei controlli di Windows Form costitutivi e consente di esporre e associare le relative proprietà in modo selettivo. Questo tipo di controllo offre inoltre una grande varietà di funzioni predefinite per la gestione della tastiera senza richiedere ulteriore intervento da parte dello sviluppatore.

Ad esempio, è possibile compilare un controllo composito per visualizzare i dati di indirizzo di un cliente contenuti in un database. Il controllo può includere un controllo DataGridView per la visualizzazione dei campi del database, un controllo BindingSource per gestire l'associazione a un'origine dati e un controllo BindingNavigator per lo spostamento tra i record. È possibile esporre in modo selettivo le proprietà di associazione dei dati, creare un package e riutilizzare l'intero controllo in un'altra applicazione. Per un esempio di questo tipo di controllo composito, vedere Procedura: applicare attributi nei controlli Windows Form.

Per modificare un controllo composito è necessario derivarlo dalla classe UserControl. La classe base UserControl fornisce il routing da tastiera per i controlli figlio e consente il funzionamento di tali controlli come gruppo. Per ulteriori informazioni, vedere Sviluppo di un controllo Windows Form composto.

Consigli

L'eredità dalla classe UserControl risulta utile quando:

  • Si desidera combinare la funzionalità di vari controlli Windows Form in una singola unità riutilizzabile.

Controlli estesi

È possibile derivare un controllo ereditato da qualsiasi controllo Windows Form esistente. Questo meccanismo consente di mantenere tutta la funzionalità inerente a un controllo di Windows Form e di estenderla mediante l'aggiunta di proprietà, metodi o altre funzionalità personalizzate. Mediante questa opzione è possibile eseguire l'override della logica di disegno del controllo di base ed estendere la relativa interfaccia utente modificandone l'aspetto.

È ad esempio possibile creare un controllo derivato dal controllo Button che tenga traccia del numero di selezioni effettuate dall'utente.

Alcuni controlli consentono di aggiungere anche un aspetto personalizzato all'interfaccia utente grafica del controllo mediante l'override del metodo OnPaint della classe base. Nel caso di un pulsante esteso che tenga traccia delle selezioni effettuate, è possibile eseguire l'override del metodo OnPaint per chiamare l'implementazione base di OnPaint e quindi visualizzare il numero di clic in un angolo dell'area client del controllo Button.

Consigli

L'eredità da un controllo Windows Form risulta utile quando:

  • La maggior parte delle funzionalità necessarie sono identiche a un controllo Windows Form esistente.

  • Non è necessario disporre di un'interfaccia utente grafica personalizzata o si desidera progettare una nuova interfaccia utente grafica per un controllo esistente.

Controlli personalizzati

Un altro metodo di creazione di un controllo consiste nel crearlo praticamente dal nulla ereditando dalla classe Control che fornisce tutte le funzionalità di base richieste dai controlli, ad esempio gli eventi di gestione del mouse e della tastiera, ma non le funzionalità specifiche dei controlli o l'interfaccia grafica.

La creazione di un controllo mediante eredità dalla classe Control richiede un lavoro più complesso rispetto all'eredità da UserControl o da un controllo di Windows Form esistente. Poiché l'implementazione è lasciata principalmente allo sviluppatore, il controllo offre una maggiore flessibilità rispetto a un controllo composito o esteso e può essere personalizzato in modo da soddisfare esigenze specifiche.

Per implementare un controllo personalizzato, è necessario scrivere il codice per l'evento OnPaint del controllo nonché l'eventuale codice specifico richiesto da ogni funzionalità. È inoltre possibile eseguire l'override del metodo WndProc e gestire direttamente i messaggi Windows. Questa è la tecnica più efficace per creare un controllo, ma per utilizzarla in modo adeguato è necessario avere familiarità con l'API Microsoft Win32®.

Un esempio di controllo personalizzato è dato da un controllo che duplica l'aspetto e il funzionamento di un orologio analogico. Il richiamo del disegno personalizzato farà muovere le lancette dell'orologio in risposta agli eventi Tick di un componente Timer interno. Per ulteriori informazioni, vedere Procedura: sviluppare un controllo di Windows Form semplice.

Consigli

L'eredità dalla classe Control risulta utile quando:

  • Si desidera fornire una rappresentazione grafica personalizzata del controllo.

  • È necessario implementare funzionalità personalizzate che non sono disponibili nei controlli standard.

Controlli ActiveX

Sebbene l'infrastruttura Windows Form sia stata ottimizzata per contenere controlli di Windows Form, è comunque possibile utilizzare controlli ActiveX. Questa attività è supportata in Visual Studio. Per ulteriori informazioni, vedere la classe Procedura: aggiungere i controlli ActiveX a Windows Form.

Controlli privi di finestra

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

Progettazione personalizzata

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

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

Vedere anche

Attività

Procedura: sviluppare un controllo di Windows Form semplice

Procedura: creare un controllo Windows Form che utilizza le funzionalità di progettazione

Concetti

Sviluppo di un controllo Windows Form composto

Altre risorse

Sviluppo di controlli Windows Form personalizzati con .NET Framework

Estensione del supporto in fase di progettazione