Controlli con supporto predefinito per il disegno da parte del proprietario

Il disegno da parte del proprietario in Windows Form, noto anche come disegno personalizzato, è una tecnica che consente di modificare l'aspetto visivo di alcuni controlli.

Nota

La parola "control" in questo argomento viene usata per indicare le classi che derivano da Control o Component.

In genere, Windows gestisce automaticamente il disegno usando le impostazioni delle proprietà, ad BackColor esempio per determinare l'aspetto di un controllo. Con il disegno da parte del proprietario, si acquisisce la precedenza sul processo di disegno, modificando elementi dell'aspetto non disponibili quando si usano le proprietà. Molti controlli, ad esempio, consentono di impostare il colore del testo visualizzato, ma è previsto un limite di un solo colore. Il disegno da parte del proprietario consente, ad esempio, di visualizzare parte del testo in nero e parte in rosso.

Il disegno da parte del proprietario è in pratica simile al disegno di elementi grafici in un form. Ad esempio, è possibile usare metodi grafici in un gestore per l'evento del Paint modulo per emulare un ListBox controllo, ma è necessario scrivere codice personalizzato per gestire tutte le interazioni dell'utente. Con il disegno da parte del proprietario, il controllo usa il codice per disegnare i contenuti, ma mantiene tutte le funzionalità intrinseche. È possibile usare metodi Graphics per disegnare ogni elemento nel controllo o per personalizzare alcuni dettagli di ogni elemento mentre si usa l'aspetto predefinito per altri dettagli di ogni elemento.

Disegno da parte del proprietario nei controlli Windows Form

Per eseguire il disegno da parte del proprietario nei controlli che lo supportano, in genere è necessario impostare una proprietà e gestire uno o più eventi.

La maggior parte dei controlli che supportano il disegno da parte del proprietario ha una proprietà OwnerDraw o DrawMode che indica se il controllo genera uno o più eventi correlati al disegno quando disegna se stesso.

I controlli senza la proprietà OwnerDraw o DrawMode includono il controllo DataGridView, che fornisce eventi di disegno che si verificano automaticamente, e il controllo ToolStrip, che viene disegnato usando una classe di rendering esterna con i propri eventi correlati al disegno.

Sono disponibili molti tipi di eventi di disegno diversi, ma un evento di disegno tipico si verifica per disegnare un singolo elemento in un controllo. Il gestore eventi riceve un oggetto EventArgs che contiene informazioni sull'elemento che viene disegnato e sugli strumenti che è possibile usare per disegnarlo. Ad esempio, questo oggetto contiene in genere il numero di indice dell'elemento all'interno della raccolta padre, un Rectangle oggetto che indica i limiti di visualizzazione dell'elemento e un Graphics oggetto per chiamare i metodi di disegno. Per alcuni eventi, l'oggetto EventArgs fornisce informazioni aggiuntive sull'elemento e sui metodi che è possibile chiamare per disegnare alcuni dettagli dell'elemento per impostazione predefinita, ad esempio lo sfondo o il rettangolo dello stato attivo.

Per creare un controllo riutilizzabile contenente le personalizzazioni disegnate dal proprietario, creare una nuova classe che deriva da una classe di controlli che supporta il disegno da parte del proprietario. Invece di gestire gli eventi di disegno, includere il codice del disegno da parte del proprietario negli override per uno o più metodi OnEventName appropriati nella nuova classe. In questo caso, verificare di chiamare il metodo o i metodi OnEventName della classe base in modo che gli utenti del controllo possano gestire gli eventi di disegno da parte del proprietario e creare personalizzazioni aggiuntive.

I controlli Windows Form seguenti supportano il disegno da parte del proprietario in tutte le versioni di .NET Framework:

I controlli seguenti supportano il disegno proprietario solo in .NET Framework 2.0:

I controlli seguenti supportano il disegno del proprietario e sono nuove in .NET Framework 2.0:

Le sezioni seguenti contengono altre informazioni dettagliate su ogni controllo.

Controlli ListBox e ComboBox

I ListBox controlli e ComboBox consentono di disegnare singoli elementi nel controllo in un'unica dimensione o in dimensioni variabili.

Nota

Anche se il CheckedListBox controllo è derivato dal ListBox controllo , non supporta il disegno del proprietario.

Per disegnare ogni elemento con le stesse dimensioni, impostare la DrawMode proprietà su OwnerDrawFixed e gestire l'evento DrawItem .

Per disegnare ogni elemento utilizzando una dimensione diversa, impostare la DrawMode proprietà su OwnerDrawVariable e gestire entrambi gli MeasureItem eventi e DrawItem . L'evento MeasureItem consente di indicare le dimensioni di un elemento prima che si verifichi l'evento DrawItem per tale elemento.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti seguenti:

Il MenuItem componente rappresenta una singola voce di menu in un MainMenu componente o ContextMenu .

Per disegnare un MenuItemoggetto , impostarne la OwnerDraw proprietà su true e gestire il relativo DrawItem evento. Per personalizzare le dimensioni della voce di menu prima che si verifichi l'evento DrawItem, gestire l'evento MeasureItem dell'elemento.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti di riferimento seguenti:

Controllo TabControl

Il TabControl controllo consente di disegnare singole schede nel controllo . Il disegno proprietario influisce solo sulle schede; il TabPage contenuto non è interessato.

Per disegnare ogni scheda in un TabControloggetto , impostare la DrawMode proprietà su OwnerDrawFixed e gestire l'evento DrawItem . Questo evento si verifica una volta per ogni scheda solo quando la scheda è visibile nel controllo.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti di riferimento seguenti:

Componente ToolTip

Il ToolTip componente consente di disegnare l'intera descrizione comando quando viene visualizzata.

Per disegnare un ToolTipoggetto , impostarne la OwnerDraw proprietà su true e gestire il relativo Draw evento. Per personalizzare le dimensioni dell'oggetto ToolTip prima che si verifichi l'evento Draw , gestire l'evento Popup e impostare la ToolTipSize proprietà nel gestore eventi.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti di riferimento seguenti:

Controllo ListView

Il ListView controllo consente di disegnare singoli elementi, elementi secondari e intestazioni di colonna nel controllo .

Per abilitare il disegno da parte del proprietario nel controllo, impostare la proprietà OwnerDraw su true.

Per disegnare ogni elemento nel controllo, gestire l'evento DrawItem.

Per disegnare ogni sottoelemento o intestazione di colonna nel controllo quando la View proprietà è impostata su Details, gestire gli DrawSubItem eventi e DrawColumnHeader .

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti di riferimento seguenti:

Controllo TreeView

Il TreeView controllo consente di disegnare singoli nodi nel controllo .

Per disegnare solo il testo visualizzato in ogni nodo, impostare la DrawMode proprietà su OwnerDrawText e gestire l'evento DrawNode per disegnare il testo.

Per disegnare tutti gli elementi di ogni nodo, impostare la DrawMode proprietà su OwnerDrawAll e gestire l'evento DrawNode per disegnare gli elementi necessari, ad esempio testo, icone, caselle di controllo, segni più e meno e linee che collegano i nodi.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti di riferimento seguenti:

Controllo DataGridView

Il DataGridView controllo consente di disegnare singole celle e righe nel controllo .

Per disegnare singole celle, gestire l'evento CellPainting.

Per disegnare singole righe o elementi delle righe, gestire uno o entrambi gli eventi RowPrePaint e RowPostPaint. L'evento RowPrePaint si verifica prima che le celle in una riga vengano disegnate e l'evento RowPostPaint si verifica dopo che le celle sono state disegnate. È possibile gestire entrambi gli eventi e l'evento CellPainting per disegnare separatamente lo sfondo delle righe, le singole celle e il primo piano delle righe oppure è possibile fornire personalizzazioni specifiche ove necessario e usare la visualizzazione predefinita per gli altri elementi della riga.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti seguenti:

Controllo ToolStrip

ToolStrip e i controlli derivati consentono di personalizzare qualsiasi aspetto del loro aspetto.

Per fornire il rendering personalizzato per ToolStrip i controlli, impostare la Renderer proprietà di un ToolStripoggetto , ToolStripManager, ToolStripPanelo ToolStripContentPanel su un ToolStripRenderer oggetto e gestire uno o più degli eventi di disegno forniti dalla ToolStripRenderer classe . In alternativa, impostare una proprietà su un'istanza Renderer della classe derivata da ToolStripRenderer, ToolStripProfessionalRenderero ToolStripSystemRenderer che implementa o esegue l'override di metodi EventName specificiOn.

Per altre informazioni, inclusi gli esempi di codice, vedere gli argomenti seguenti:

Vedi anche