Freigeben über


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.

Anmerkung

Mit dem Begriff „Steuerelement“ werden in diesem Artikel 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. Mit vielen Steuerelementen können Sie beispielsweise die Farbe des angezeigten Texts festlegen, sie sind jedoch auf eine einzelne 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. Sie können beispielsweise Grafikmethoden in einem Handler für das Paint-Ereignis des Formulars verwenden, um ein ListBox-Steuerelement zu emulieren. Sie müssen jedoch ihren eigenen Code schreiben, um alle Benutzerinteraktionen zu verarbeiten. Beim Ownerdrawing verwendet das Steuerelement den von Ihnen geschriebenen Code, um den Inhalt zu zeichnen, behält sonst aber seine gesamte systeminterne Funktionalität bei. Sie können Grafikmethoden verwenden, um jedes Element im Steuerelement zu zeichnen oder einige Aspekte jedes Elements anzupassen, während Sie die Standarddarstellung für andere Aspekte jedes Elements verwenden.

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 selbst zeichnet.

Steuerelemente, die nicht über eine OwnerDraw- oder DrawMode-Eigenschaft verfügen, enthalten das DataGridView-Steuerelement, das Automatisch eintretende Zeichnungsereignisse bereitstellt, und das ToolStrip-Steuerelement, das mit einer externen Renderingklasse gezeichnet wird, die über eigene zeichnungsbezogene Ereignisse verfügt.

Es gibt viele verschiedene Arten von Zeichenvorgängen, aber typischerweise findet ein solcher statt, um ein einzelnes Element innerhalb eines Steuerelements zu zeichnen. Der Ereignishandler empfängt ein EventArgs-Objekt, das Informationen über das zu zeichnende Element enthält, und Tools, mit denen Sie es zeichnen 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 Benutzende des Steuerelements Ownerdrawing-Ereignisse behandeln und weitere Anpassungen vornehmen können.

Die folgenden Windows Forms-Steuerelemente unterstützen das benutzerdefinierte Zeichnen in allen Versionen des .NET Framework:

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

Die folgenden Steuerelemente unterstützen die benutzerdefinierte Zeichnung und sind neu in .NET Framework 2.0:

Die folgenden Abschnitte enthalten zusätzliche Details für jedes 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.

Anmerkung

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 dieses Element eintritt.

Weitere Informationen, einschließlich Codebeispielen, finden Sie in den folgenden Themen:

Die MenuItem-Komponente stellt ein einzelnes Menüelement in einer MainMenu oder ContextMenu Komponente dar.

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 Codebeispielen, finden Sie in 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 Codebeispielen, finden Sie in 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 des ToolTip anzupassen, bevor das Draw-Ereignis eintritt, behandeln Sie das Popup-Ereignis und legen Sie die ToolTipSize-Eigenschaft im Ereignishandler fest.

Weitere Informationen, einschließlich Codebeispielen, finden Sie in 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 auf true fest.

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

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

Weitere Informationen, einschließlich Codebeispielen, finden Sie in 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 Sie das DrawNode-Ereignis, um die benötigten Elemente zu zeichnen, z. B. Text, Symbole, Kontrollkästchen, Plus- und Minuszeichen sowie Linien, die die Knoten verbinden.

Weitere Informationen, einschließlich Codebeispielen, finden Sie in 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 Codebeispielen, finden Sie in 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. Legen Sie alternativ eine Renderer-Eigenschaft auf eine Instanz Ihrer eigenen Klasse fest, die von ToolStripRenderer, ToolStripProfessionalRendereroder ToolStripSystemRenderer abgeleitet ist, die bestimmte OnEventName- Methoden implementiert oder außer Kraft setzt.

Weitere Informationen, einschließlich Codebeispielen, finden Sie in den folgenden Themen:

Weitere Informationen