Controlli con supporto incorporato per la creazione da parte del proprietario
Aggiornamento: novembre 2007
Il disegno del proprietario, definito anche disegno personalizzato, in Windows Form è una tecnica per modificare l'aspetto visivo di alcuni controlli.
Nota: |
---|
La parola "controllo" in questo argomento viene utilizzata per indicare le classi che derivano da Control o Component. |
In genere, Windows gestisce automaticamente la generazione mediante le impostazioni di proprietà come BackColor per determinare l'aspetto di un controllo. Con il disegno personalizzato l'utente assume il controllo del processo di generazione, modificando elementi dell'aspetto non disponibili nelle proprietà. Ad esempio, molti controlli consentono di impostare il colore del testo visualizzato, ma è possibile utilizzare un solo colore. Il disegno personalizzato consente di eseguire operazioni come la visualizzazione di parte del testo in nero e di parte in rosso.
In pratica, il disegno personalizzato è simile alla creazione di elementi grafici in un form. È possibile ad esempio utilizzare metodi grafici in un gestore dell'evento Paint del form per emulare un controllo ListBox. In questo caso, tuttavia, è necessario scrivere un proprio codice per gestire tutte le interazioni dell'utente. Con il disegno personalizzato, il controllo impiega il codice per creare i contenuti mantenendo allo stesso tempo tutte le relative capacità intrinseche. I metodi grafici possono essere utilizzati per disegnare i singoli elementi del controllo o per personalizzarne alcuni aspetti utilizzando allo stesso tempo l'aspetto predefinito di ciascun elemento.
Disegno personalizzato nei controlli di Windows Form
Per eseguire il disegno personalizzato nei controlli che lo supportano, viene di solito impostata una proprietà e vengono gestiti uno o più eventi.
La maggior parte dei controlli che supportano il disegno personalizzato dispone della proprietà OwnerDraw o della proprietà DrawMode che indica se il controllo genererà l'evento o gli eventi relativi al disegno durante il processo di generazione.
I controlli che non dispongono della proprietà OwnerDraw o della proprietà DrawMode includono il controllo DataGridView, che fornisce eventi di disegno che si verificano automaticamente, e il controllo ToolStrip, che viene creato utilizzando una classe esterna per il rendering dotata di eventi relativi al disegno.
Sono disponibili molti tipi diversi di eventi di disegno, ma in genere un evento di disegno viene generato per disegnare un singolo elemento in un controllo. Il gestore eventi riceve un oggetto EventArgs che contiene informazioni sull'elemento disegnato e strumenti che è possibile utilizzare per il disegno. Questo oggetto contiene in genere il numero di indice dell'elemento all'interno dell'insieme padre, una struttura Rectangle che indica i limiti di visualizzazione dell'elemento e un oggetto Graphics per la chiamata ai metodi di disegno. Per alcuni eventi, l'oggetto EventArgs fornisce informazioni aggiuntive sull'elemento e sui metodi che è possibile chiamare per disegnare alcuni aspetti predefiniti dell'elemento, come lo sfondo o un rettangolo di attivazione.
Per creare un controllo riutilizzabile che contenga le personalizzazioni del disegno personalizzato, creare una nuova classe da una classe di controlli che supporti il disegno personalizzato. Piuttosto che gestire gli eventi di disegno, includere il codice del disegno personalizzato in override del metodo OnNomeEvento appropriato o dei metodi presenti nella nuova classe. In questo caso, accertarsi di chiamare il metodo o i metodi OnNomeEvento della classe di base, in modo che gli utenti del controllo possano gestire gli eventi del disegno personalizzato e fornire personalizzazioni aggiuntive.
I controlli Windows Form riportati di seguito supportano il disegno personalizzato in tutte le versioni di .NET Framework.
MenuItem (utilizzato da MainMenu eContextMenu)
I controlli riportati di seguito supportano il disegno personalizzato solo in .NET Framework versione 2.0:
I controlli riportati di seguito supportano il disegno personalizzato e sono nuovi in .NET Framework versione 2.0:
Nelle sezioni successive vengono forniti dettagli aggiuntivi per ciascuno di questi controlli.
Controlli ListBox e ComboBox
I controlli ListBox e ComboBox consentono il disegno di singoli elementi nel controllo utilizzando la stessa dimensione o dimensioni variabili.
Nota: |
---|
Sebbene il controllo CheckedListBox sia derivato dal controllo ListBox, non supporta il disegno personalizzato. |
Per disegnare ciascun elemento con le stesse dimensioni, impostare la proprietà DrawMode su OwnerDrawFixed e gestire l'evento DrawItem.
Per disegnare ciascun elemento con dimensioni diverse, impostare la proprietà DrawMode su OwnerDrawVariable e gestire entrambi gli eventi MeasureItem e DrawItem. L'evento MeasureItem consente di indicare la dimensione di un elemento prima che l'evento DrawItem si verifichi per tale elemento.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti:
Componente MenuItem
Il componente MenuItem rappresenta una singola voce di menu in un componente MainMenu o ContextMenu.
Per creare un elemento MenuItem, impostarne la proprietà OwnerDraw su true e gestirne il relativo evento DrawItem. Per personalizzare la dimensione della voce di menu prima che si verifichi l'evento DrawItem, gestire l'evento MeasureItem dell'elemento.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti di riferimento:
Controllo TabControl
Il controllo TabControl consente di disegnare singole schede all'interno del controllo. Il disegno personalizzato ha effetto solo sulle schede. I contenuti di TabPage non vengono modificati.
Per disegnare singole schede in un controllo TabControl, impostare la proprietà DrawMode su OwnerDrawFixed e gestire l'evento DrawItem. Questo evento viene generato una volta per ogni scheda solo quando la scheda è visibile nel controllo.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti di riferimento:
Componente ToolTip
Il componente ToolTip consente di creare la descrizione comandi quando è presente.
Per creare un elemento ToolTip, impostarne la proprietà OwnerDraw su true e gestirne il relativo evento Draw. Per personalizzare la dimensione del componente ToolTip prima che venga generato l'evento Draw, gestire l'evento Popup e impostare la proprietà ToolTipSize nel gestore eventi.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti di riferimento:
Controllo ListView
Il controllo ListView consente di disegnare singoli elementi, elementi secondari e intestazioni di colonna all'interno del controllo.
Per consentire il disegno personalizzato nel controllo, impostare la proprietà OwnerDraw su true.
Per disegnare i singoli elementi nel controllo, gestire l'evento DrawItem.
Per disegnare i singoli elementi secondari o le intestazioni di colonna quando la proprietà View è impostata su Details, gestire gli eventi DrawSubItem e DrawColumnHeader.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti di riferimento:
Controllo TreeView
Il controllo TreeView consente di disegnare singoli nodi all'interno del controllo.
Per creare solo il testo da visualizzare in ciascun nodo, impostare la proprietà DrawMode su OwnerDrawText e gestire l'evento DrawNode per creare il testo.
Per disegnare tutti gli elementi di ciascun nodo, impostare la proprietà DrawMode su OwnerDrawAll e gestire l'evento DrawNode per tutti gli elementi necessari, come testo, icone, caselle di controllo, segni più e meno e linee di collegamento dei nodi.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti di riferimento:
Controllo DataGridView
Il controllo DataGridView consente di disegnare singole celle e righe all'interno del controllo.
Per disegnare singole celle, gestire l'evento CellPainting.
Per disegnare singole righe o elementi di righe, gestire uno degli eventi RowPrePaint e RowPostPaint o entrambi. L'evento RowPrePaint viene generato prima che vengano generate le celle presenti in una riga, mentre l'evento RowPostPaint viene generato dopo che sono state generate le celle. È possibile gestire entrambi gli eventi e l'evento CellPainting per generare separatamente lo sfondo della riga, le singole celle e il colore di primo piano della riga oppure fornire personalizzazioni specifiche nei punti in cui è necessario e utilizzare la visualizzazione predefinita per altri elementi della riga.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti:
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
È possibile personalizzare tutti i dettagli dell'aspetto del controllo ToolStrip e dei controlli derivati.
Per fornire il rendering personalizzato per i controlli ToolStrip, impostare la proprietà Renderer della classe ToolStrip, ToolStripManager, ToolStripPanel o ToolStripContentPanel su un oggetto ToolStripRenderer e gestire uno o più dei numerosi eventi di disegno forniti dalla classe ToolStripRenderer. In alternativa, impostare la proprietà Renderer su un'istanza della classe personalizzata derivata da ToolStripRenderer, ToolStripProfessionalRenderer o ToolStripSystemRenderer che implementi o esegua l'override di specifici metodi OnNomeEvento.
Per ulteriori informazioni, inclusi gli esempi di codice, vedere i seguenti argomenti:
Procedura: creare e impostare un renderer personalizzato per il controllo ToolStrip in Windows Form
Procedura: eseguire un disegno personalizzato di un controllo ToolStrip