Steuerelemente mit integrierter Ownerdrawing-Unterstützung

Ownerdrawing in Windows Forms, das auch als benutzerdefiniertes Zeichnen bezeichnet, ist ein Verfahren zum Ändern der Darstellung bestimmter Steuerelemente.

Hinweis

Mit dem Begriff „Steuerelement“ werden in diesem Thema Klassen bezeichnet, die entweder von Control oder Component abgeleitet sind.

Normalerweise werden Zeichnungsvorgänge in Windows automatisch verarbeitet, indem Eigenschafteneinstellungen wie BackColor verwendet werden, um die Darstellung eines Steuerelements zu bestimmen. Beim Ownerdrawing übernehmen Sie das Zeichnen und können Darstellungselemente ändern, die nicht mithilfe von Eigenschaften angepasst werden können. Beispielsweise kann bei zahlreichen Steuerelementen die Farbe des angezeigten Textes festgelegt werden. Dabei ist die Anzeige jedoch auf eine Farbe beschränkt. Das Ownerdrawing bietet beispielsweise die Möglichkeit, einen Teil des Textes schwarz und den anderen rot anzuzeigen.

In der Praxis ähnelt Ownerdrawing dem Zeichnen von Grafiken auf einem Formular. Beispielsweise können Sie Grafikmethoden in einem Handler für das Paint-Ereignis des Formulars verwenden, um ein ListBox-Steuerelement zu emulieren. Zur Behandlung der gesamten Benutzerinteraktion müssten Sie jedoch eigenen Code schreiben. Beim Ownerdrawing verwendet das Steuerelement den von Ihnen geschriebenen Code, um den Inhalt zu zeichnen, behält im Übrigen aber seine gesamte systeminterne Funktionalität bei. Sie können Grafikmethoden zum Zeichnen der einzelnen Elemente im Steuerelement oder zum Anpassen einiger Aspekte einzelner Elemente verwenden, während für andere Aspekte einzelner Elemente wiederum die Standarddarstellung übernommen werden kann.

Ownerdrawing in Windows Forms-Steuerelementen

Um Ownerdrawing in Steuerelementen auszuführen, die diese Art des Zeichnens unterstützen, legen Sie normalerweise eine Eigenschaft fest und behandeln mindestens ein Ereignis.

Die meisten Steuerelemente mit Ownerdrawing-Unterstützung verfügen über die OwnerDraw-Eigenschaft oder DrawMode-Eigenschaft, die angibt, ob das Steuerelement eines oder mehrere zeichnungsbezogene Ereignisse auslöst, sobald es gezeichnet wird.

Zu den Steuerelementen, die keine OwnerDraw-Eigenschaft oder DrawMode-Eigenschaft aufweisen, gehört das DataGridView-Steuerelement, das automatisch ausgelöste Zeichnungsereignisse bereitstellt, sowie das ToolStrip-Steuerelement, das unter Verwendung einer externen Renderklasse gezeichnet wird, die eigene zeichnungsbezogene Ereignisse aufweist.

Es stehen viele verschiedene Arten von Zeichnungsereignissen zur Verfügung. Ein typisches Zeichnungsereignis tritt jedoch auf, wenn ein einzelnes Element innerhalb eines Steuerelements gezeichnet werden soll. Der Ereignishandler empfängt ein EventArgs-Objekt mit Informationen zum gezeichneten Element sowie zu den Tools, die zum Zeichnen verwendet werden können. Dieses Objekt enthält üblicherweise die Indexnummer des Elements innerhalb seiner übergeordneten Sammlung, ein Rectangle, das die Begrenzung des Anzeigebereichs für das Element angibt, sowie ein Graphics-Objekt zum Aufrufen von Zeichnungsmethoden. Bei einigen Ereignissen umfasst das EventArgs-Objekt zusätzliche Informationen zum Element sowie zu den Methoden, die aufgerufen werden können, um einige Aspekte des Elements in der Standarddarstellung zu zeichnen, z. B. den Hintergrund oder ein Fokusrechteck.

Zum Erstellen eines wiederverwendbaren Steuerelements, das Ownerdrawing-Anpassungen enthält, erstellen Sie eine neue Klasse, die von einer Steuerelementklasse mit Ownerdrawing-Unterstützung abgeleitet ist. Anstatt Zeichnungsereignisse zu behandeln, sollten Sie Ownerdrawing-Code in Überschreibungen für mindestens eine geeignete OnEventName-Methode in der neuen Klasse einfügen. Stellen Sie in diesem Fall sicher, dass die OnEventName-Methoden der Basisklasse aufgerufen werden, damit Benutzer des Steuerelements Ownerdrawing-Ereignisse behandeln und weitere Anpassungen vornehmen können.

Die folgenden Windows Forms-Steuerelemente unterstützen Ownerdrawing in allen Versionen von .NET Framework:

Die folgenden Steuerelemente unterstützen Ownerdrawing nur in .NET Framework 2.0:

Die folgenden Steuerelemente unterstützen Ownerdrawing und sind neu in .NET Framework 2.0:

Die folgenden Abschnitte enthalten zusätzliche Details zu jedem dieser Steuerelemente.

Die Steuerelemente ListBox und ComboBox

Die Steuerelemente ListBox und ComboBox bieten die Möglichkeit, einzelne Elemente im Steuerelement entweder in derselben oder verschiedenen Größen zu zeichnen.

Hinweis

Obwohl das CheckedListBox-Steuerelement vom ListBox-Steuerelement abgeleitet ist, unterstützt es Ownerdrawning nicht.

Um alle Elemente in derselben Größe zu zeichnen, legen Sie die DrawMode-Eigenschaft auf OwnerDrawFixed fest und behandeln das DrawItem-Ereignis.

Um alle Elemente mit unterschiedlichen Größen zu zeichnen, legen Sie die DrawMode-Eigenschaft auf OwnerDrawVariable fest und behandeln die Ereignisse MeasureItem und DrawItem. Mit dem MeasureItem-Ereignis können Sie die Größe eines Elements angeben, bevor das DrawItem-Ereignis für das jeweilige Element auftritt.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Themen:

Die MenuItem-Komponente steht für ein einzelnes Menüelement in der Komponente MainMenu oder ContextMenu.

Um MenuItem zu zeichnen, legen Sie die zugehörige OwnerDraw-Eigenschaft auf true fest und behandeln das zugehörige DrawItem-Ereignis. Um die Größe des Menüelements anzupassen, bevor das DrawItem-Ereignis auftritt, behandeln Sie das MeasureItem-Ereignis des Elements.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Referenzthemen:

TabControl-Steuerelement

Das TabControl-Steuerelement ermöglicht Ihnen, einzelne Registerkarten im Steuerelement zu zeichnen. Ownerdrawing wirkt sich nur auf die Registerkarten aus, der Inhalt von TabPage wird nicht beeinflusst.

Um jede Registerkarte in TabControl zu zeichnen, legen Sie die DrawMode-Eigenschaft auf OwnerDrawFixed fest und behandeln das DrawItem-Ereignis. Dieses Ereignis tritt jeweils einmal für jede Registerkarte auf, jedoch nur dann, wenn die Registerkarte im Steuerelement sichtbar ist.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Referenzthemen:

ToolTip-Komponente

Die ToolTip-Komponente ermöglicht Ihnen, die gesamte QuickInfo zu zeichnen, wenn diese angezeigt wird.

Um ToolTip zu zeichnen, legen Sie die zugehörige OwnerDraw-Eigenschaft auf true fest und behandeln das zugehörige Draw-Ereignis. Um die Größe von ToolTip anzupassen, ehe das Draw-Ereignis eintritt, behandeln Sie das Popup-Ereignis, und legen Sie die ToolTipSize-Eigenschaft im Ereignishandler fest.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Referenzthemen:

ListView-Steuerelement

Das ListView-Steuerelement ermöglicht Ihnen, einzelne Elemente, Unterelemente und Spaltenheader im Steuerelement zu zeichnen.

Um Ownerdrawing im Steuerelement zu aktivieren, legen Sie die OwnerDraw-Eigenschaft true fest.

Um jedes Element im Steuerelement zu zeichnen, behandeln Sie das DrawItem-Ereignis.

Um jedes Unterelement oder jeden Spaltenheader in Steuerelement zu zeichnen, wenn die View-Eigenschaft auf Details festgelegt ist, behandeln Sie die Ereignisse DrawSubItem und DrawColumnHeader.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Referenzthemen:

TreeView-Steuerelement

Das TreeView-Steuerelement ermöglicht Ihnen, einzelne Knoten im Steuerelement zu zeichnen.

Um nur den in den einzelnen Knoten angezeigten Text zu zeichnen, legen Sie die DrawMode-Eigenschaft auf OwnerDrawText fest und behandeln das DrawNode-Ereignis zum Zeichnen des Texts.

Um alle Elemente jedes Knotens zu zeichnen, legen Sie die DrawMode-Eigenschaft auf OwnerDrawAll fest und behandeln das DrawNode-Ereignis zum Zeichnen des jeweils gewünschten Elements, z. B. Text, Symbole, Kontrollkästchen, Plus- und Minuszeichen sowie Verbindungslinien zwischen den Knoten.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Referenzthemen:

DataGridView-Steuerelement

Das DataGridView-Steuerelement ermöglicht Ihnen, einzelne Zellen und Zeilen im Steuerelement zu zeichnen.

Um einzelne Zellen zu zeichnen, behandeln Sie das CellPainting-Ereignis.

Um einzelne Zeilen oder Zeilenelemente zu zeichnen, behandeln Sie das RowPrePaint- und/oder RowPostPaint-Ereignis. Das RowPrePaint-Ereignis tritt vor dem Zeichnen der Zellen in einer Zeile und das RowPostPaint-Ereignis danach auf. Sie können beide Ereignisse und das CellPainting-Ereignis behandeln, um den Zeilenhintergrund, einzelne Zellen sowie den Zeilenvordergrund separat zu zeichnen. Alternativ können Sie für bestimmte Elemente spezielle Anpassungen bereitstellen und für die übrigen Zeilenelemente die Standarddarstellung verwenden.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Themen:

ToolStrip-Steuerelement

ToolStrip und abgeleitete Steuerelemente ermöglichen Ihnen, beliebige Aspekte der Steuerelementdarstellung anzupassen.

Um benutzerdefiniertes Rendering für ToolStrip-Steuerelemente zu ermöglichen, legen Sie die Renderer-Eigenschaft eines ToolStrip-, ToolStripManager-, ToolStripPanel- oder ToolStripContentPanel-Objekts auf ein ToolStripRenderer-Objekt fest und behandeln eines oder mehrere der vielen Zeichnungsereignisse, die von der ToolStripRenderer-Klasse bereitgestellt werden. Alternativ legen Sie eine Renderer-Eigenschaft auf eine Instanz Ihrer eigenen von ToolStripRenderer, ToolStripProfessionalRenderer oder ToolStripSystemRenderer abgeleiteten Klasse fest, die bestimmte OnEventName-Methoden implementiert oder überschreibt.

Weitere Informationen, einschließlich Codebeispiele, finden Sie unter den folgenden Themen:

Weitere Informationen