Condividi tramite


Controlli personalizzati (Windows Form .NET)

Con Windows Form è possibile sviluppare e implementare nuovi controlli. È possibile creare un nuovo controllo utente, modificare i controlli esistenti tramite ereditarietà o scrivere un controllo personalizzato che esegue il proprio disegno. In questo articolo vengono evidenziate le differenze tra i vari tipi di controlli da cui è possibile ereditare e vengono fornite informazioni su come scegliere un particolare tipo di controllo per il progetto.

Importante

La documentazione di Desktop Guide per .NET 7 e .NET 6 è in fase di costruzione.

Classe di controllo di base

La Control classe è la classe base per i controlli Windows Form. Fornisce l'infrastruttura necessaria per la visualizzazione visiva nelle applicazioni Windows Form e offre le funzionalità seguenti:

  • 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.

Poiché gran parte dell'infrastruttura è fornita dalla classe di base, è relativamente facile sviluppare controlli Windows Form personalizzati.

Creare un controllo personalizzato

È possibile creare tre tipi di controlli personalizzati: controlli utente, controlli estesi e controlli personalizzati. La tabella seguente consente di decidere quale tipo di controllo è necessario creare:

Se... Creare un oggetto ...
  • Combinare le funzionalità di vari controlli di Windows Form in una singola unità riusabile.
Progettare un controllo utente ereditando da System.Windows.Forms.UserControl.
  • Molte delle funzionalità necessarie sono identiche a quelle incluse in un controllo di Windows Form esistente.
  • Non è necessaria un'interfaccia utente grafica personalizzata o si vuole progettare una nuova interfaccia utente grafica per un controllo esistente.
Estendere un controllo ereditando da un controllo Windows Form specifico.
  • Fornire una rappresentazione grafica personalizzata del controllo.
  • È necessario implementare funzionalità personalizzate che non sono disponibili tramite controlli standard.
Creare un controllo personalizzato ereditando da System.Windows.Forms.Control.

Controlli utente

Un controllo utente è una raccolta di controlli Windows Form presentati come un singolo controllo al consumer. Questo tipo di controllo viene definito controllo composito. I controlli contenuti vengono chiamati controlli costitutivi.

Un controllo utente contiene tutte le funzionalità intrinseche associate a ognuno dei controlli Windows Form contenuti e consente di esporre e associare in modo selettivo le relative proprietà. Un controllo utente offre anche una grande quantità di funzionalità di gestione della tastiera predefinite senza ulteriori sforzi di sviluppo da parte dell'utente.

Ad esempio, è possibile creare un controllo utente per visualizzare i dati degli indirizzi dei clienti da un database. Questo controllo include un DataGridView controllo per visualizzare i campi del database, un BindingSource oggetto per gestire l'associazione a un'origine dati e un BindingNavigator controllo per spostarsi tra i record. È possibile esporre in modo selettivo le proprietà di data binding ed è possibile creare un pacchetto e riutilizzare l'intero controllo dall'applicazione all'applicazione.

Per altre informazioni, vedere Panoramica del controllo utente.

Controlli estesi

È possibile derivare un controllo ereditato da un controllo di Windows Form esistente. Con questo approccio, è possibile mantenere tutte le funzionalità intrinseche di un controllo Windows Form e quindi estendere tale funzionalità aggiungendo proprietà, metodi o altre funzionalità personalizzate. 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.

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 più pensiero e impegno rispetto all'ereditarietà o a UserControl 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 , che controlla la modalità di disegno visivo del controllo. È inoltre necessario scrivere eventuali comportamenti specifici della funzionalità per il controllo. È 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 .

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.

Le informazioni seguenti non sono aggiornate, ma possono essere utili.