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 On
EventName appropriati nella nuova classe. In questo caso, verificare di chiamare il metodo o i metodi On
EventName 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:
MenuItem (usato da MainMenu e ContextMenu)
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:
Componente MenuItem
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:
Procedura: Personalizzare l'aspetto delle celle nel controllo DataGridView di Windows Form
Procedura: Personalizzare l'aspetto delle righe nel controllo DataGridView di Windows Form
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:
Procedura: Creare e impostare un renderer personalizzato per il controllo ToolStrip in Windows Form
Procedura: Eseguire un disegno personalizzato di un controllo ToolStrip
Vedi anche
.NET Desktop feedback