Leggere in inglese

Condividi tramite


Controlli con supporto Built-In Owner-Drawing

Il disegno proprietario in Windows Form, noto anche come disegno personalizzato, è una tecnica per modificare l'aspetto visivo di determinati 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 esempio BackColor per determinare l'aspetto di un controllo. Con la funzionalità di disegno proprietario, si assume il controllo del processo di pittura, modificando gli elementi di aspetto che non sono disponibili utilizzando le proprietà. Ad esempio, molti controlli consentono di impostare il colore del testo visualizzato, ma si è limitati a un singolo colore. Il disegno proprietario consente di eseguire operazioni come visualizzare parte del testo in nero e parte in rosso.

In pratica, il disegno del proprietario è simile al disegno di grafica su un modulo. Ad esempio, è possibile usare metodi grafici in un gestore per l'evento Paint del modulo per emulare un controllo ListBox, ma è necessario scrivere codice personalizzato per gestire tutte le interazioni dell'utente. Con il disegno del proprietario, il controllo usa il tuo codice per disegnare il contenuto, ma continua a mantenere tutte le sue capacità intrinseche. È possibile utilizzare metodi grafici per disegnare ogni elemento nel controllo o per personalizzare alcuni aspetti di ogni elemento mentre si utilizza l'aspetto predefinito per altri aspetti di ogni elemento.

Disegno proprietario nei controlli Windows Form

Per eseguire il disegno personalizzato nei controlli che lo supportano, in genere si imposta una proprietà e si gestiscono uno o più eventi.

La maggior parte dei controlli che supportano il disegno personalizzato ha una proprietà OwnerDraw o DrawMode che indica se il controllo attiverà l'evento o gli eventi correlati al disegno quando viene dipinto.

I controlli che non dispongono di una proprietà OwnerDraw o DrawMode includono il controllo DataGridView, che fornisce eventi di disegno che si verificano automaticamente e il controllo ToolStrip, che viene disegnato utilizzando una classe di rendering esterna che dispone di eventi correlati al disegno.

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

Per creare un controllo riutilizzabile che contiene le personalizzazioni disegnate dal proprietario, creare una nuova classe che deriva da una classe di controllo che supporta il disegno proprietario. Invece di gestire gli eventi di disegno, includere il codice di disegno proprietario negli override per il Onmetodo o i metodi EventName appropriati nella nuova classe. Assicurarsi di chiamare il metodo o i metodi OnEventName della classe base, in modo che gli utenti del vostro controllo possano gestire gli eventi di disegno proprietario e offrire ulteriori possibilità di personalizzazione.

I controlli Windows Forms seguenti supportano il disegno personalizzato 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 nuovi in .NET Framework 2.0:

Nelle sezioni seguenti vengono forniti dettagli aggiuntivi per ognuno di questi controlli.

Controlli ListBox e ComboBox

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

Nota

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

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

Per disegnare ogni elemento utilizzando una dimensione diversa, impostare la proprietà DrawMode su OwnerDrawVariable e gestire sia gli eventi MeasureItem che 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 componente MenuItem rappresenta una singola voce di menu in un componente MainMenu o ContextMenu.

Per disegnare un MenuItem, imposta la sua proprietà OwnerDraw a true e gestisci l'evento DrawItem. 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 esempi di codice, vedere gli argomenti di riferimento seguenti:

Controllo TabControl

Il controllo TabControl consente di disegnare singole linguette nel controllo. Il disegno del proprietario influisce solo sui tab; il contenuto del TabPage non è interessato.

Per disegnare ogni scheda in TabControl, impostare la proprietà DrawMode 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 esempi di codice, vedere gli argomenti di riferimento seguenti:

Componente Descrizione comando

Il componente ToolTip consente di disegnare l'intero ToolTip quando viene visualizzato.

Per disegnare un ToolTip, imposta la sua proprietà OwnerDraw su true e gestisci il suo evento Draw. Per personalizzare la dimensione del ToolTip prima che si verifichi l'evento Draw, gestire l'evento Popup e impostare la proprietà ToolTipSize nel gestore dell'evento.

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

Controllo ListView

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

Per abilitare la gestione proprietaria del disegno nel controllo, impostare la proprietà OwnerDraw su true.

Per disegnare ciascun elemento nel controllo, gestisci l'evento DrawItem.

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

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

Controllo TreeView

Il controllo TreeView consente di disegnare singoli nodi nel controllo .

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

Per disegnare tutti gli elementi di ogni nodo, impostare la proprietà DrawMode 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 esempi di codice, vedere gli argomenti di riferimento seguenti:

Controllo DataGridView

Il controllo DataGridView consente di disegnare singole celle e righe all'interno di esso.

Per disegnare singole celle, gestire l'evento CellPainting.

Per disegnare singole righe o elementi di righe, gestire uno o entrambi gli eventi RowPrePaint e RowPostPaint. L'evento RowPrePaint si verifica prima che vengano disegnate le celle di una riga e l'evento RowPostPaint si verifica dopo che le celle vengono disegnate. È possibile gestire sia gli eventi che l'evento CellPainting per disegnare lo sfondo delle righe, le singole celle e il primo piano separatamente oppure è possibile fornire personalizzazioni specifiche in cui sono necessarie e utilizzare la visualizzazione predefinita per 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 ogni aspetto del loro aspetto.

Per fornire il rendering personalizzato per i controlli di ToolStrip, impostare la proprietà Renderer di un ToolStrip, ToolStripManager, ToolStripPanelo ToolStripContentPanel su un oggetto ToolStripRenderer e gestire uno o più eventi di disegno forniti dalla classe ToolStripRenderer. In alternativa, impostare una proprietà Renderer su un'istanza di una propria classe derivata da ToolStripRenderer, ToolStripProfessionalRenderero ToolStripSystemRenderer che implementa o sovrascrive metodi specifici OnEventName.

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

Vedere anche