Besturingselementen met Built-In Owner-Drawing Ondersteuning

Aangepast tekenen in Windows Forms, ook wel bekend als eigen rendering, is een techniek voor het wijzigen van het uiterlijk van bepaalde bedieningselementen.

Opmerking

Het woord 'besturingselement' in dit onderwerp wordt gebruikt om klassen te betekenen die zijn afgeleid van Control of Component.

Normaal gesproken verwerkt Windows het tekenen automatisch met behulp van eigenschapsinstellingen zoals BackColor om het uiterlijk van een besturingselement te bepalen. Bij het tekenen van de eigenaar neemt u het schilderijproces over, waarbij u elementen van uiterlijk wijzigt die niet beschikbaar zijn met behulp van eigenschappen. Met veel besturingselementen kunt u bijvoorbeeld de kleur instellen van de tekst die wordt weergegeven, maar u beperkt bent tot één kleur. Met eigenaarstekening kunt u bijvoorbeeld een deel van de tekst in zwart en een ander deel in rood weergeven.

In de praktijk is het tekenen van een eigenaar vergelijkbaar met het tekenen van afbeeldingen op een formulier. U kunt bijvoorbeeld grafische methoden gebruiken in een handler voor de Paint gebeurtenis van het formulier om een ListBox besturingselement te emuleren, maar u moet uw eigen code schrijven om alle interactie van gebruikers af te handelen. Bij eigenaarstekening gebruikt de control uw code om de inhoud te tekenen, maar behoudt verder al zijn intrinsieke mogelijkheden. U kunt grafische methoden gebruiken om elk item in het besturingselement te tekenen of om bepaalde aspecten van elk item aan te passen terwijl u het standaardbeeld gebruikt voor andere aspecten van elk item.

Eigenaartekening in Controls voor Windows Forms

Als u eigenaartekening wilt uitvoeren in besturingselementen die deze ondersteunen, stelt u meestal één eigenschap in en verwerkt u een of meer gebeurtenissen.

De meeste besturingselementen die eigenaartekening ondersteunen, hebben een eigenschap OwnerDraw of DrawMode die aangeeft of het besturingselement de teken-gerelateerde gebeurtenis(sen) genereert wanneer het zichzelf tekent.

Besturingselementen die geen eigenschap OwnerDraw of DrawMode hebben, bevatten het besturingselement DataGridView, waarmee tekengebeurtenissen automatisch worden uitgevoerd en het ToolStrip besturingselement, dat wordt getekend met behulp van een externe renderingklasse met eigen tekengebeurtenissen.

Er zijn veel verschillende soorten tekengebeurtenissen, maar een typische tekengebeurtenis vindt plaats om één item in een besturingselement te tekenen. De gebeurtenis-handler ontvangt een EventArgs object dat informatie bevat over het item dat wordt getekend en hulpmiddelen die u kunt gebruiken om het te tekenen. Dit object bevat bijvoorbeeld meestal het indexnummer van het item in de bovenliggende verzameling, een Rectangle die de weergavegrenzen van het item aangeeft en een Graphics object voor het aanroepen van verfmethoden. Voor sommige gebeurtenissen bevat het EventArgs object aanvullende informatie over het item en de methoden die u standaard kunt aanroepen om bepaalde aspecten van het item te schilderen, zoals de achtergrond of een rechthoek met focus.

Als u een herbruikbaar besturingselement wilt maken dat door uw eigenaar getekende aanpassingen bevat, maakt u een nieuwe klasse die is afgeleid van een besturingsklasse die eigenaartekening ondersteunt. In plaats van tekengebeurtenissen te verwerken, moet u de code van uw eigenaarstekening opnemen in overrides voor de juiste OnEventName methoden in de nieuwe klasse. Zorg ervoor dat u de basisklasse OnEventName methode of methodes aanroept, zodat gebruikers van uw besturing eigenaargetekende gebeurtenissen kunnen verwerken en extra aanpassingen mogelijk maken.

De volgende Besturingselementen voor Windows Forms ondersteunen eigenaarstekenen in alle versies van .NET Framework.

De volgende besturingselementen ondersteunen alleen eigenaarstekening in .NET Framework 2.0:

De volgende besturingselementen ondersteunen eigenaarstekening en zijn nieuw in .NET Framework 2.0:

De volgende secties bevatten aanvullende informatie voor elk van deze besturingselementen.

Lijstvak- en keuzelijstbesturingselementen

Met de besturingselementen ListBox en ComboBox kunt u afzonderlijke items in het besturingselement allemaal in één grootte of in verschillende grootten tekenen.

Opmerking

Hoewel het CheckedListBox besturingselement is afgeleid van het ListBox besturingselement, biedt dit geen ondersteuning voor eigenaarstekening.

Om elk item dezelfde grootte te tekenen, stelt u de eigenschap DrawMode in op OwnerDrawFixed en handelt u de DrawItem event af.

Als u elk item met een andere grootte wilt tekenen, stelt u de eigenschap DrawMode in op OwnerDrawVariable en verwerkt u zowel de gebeurtenissen MeasureItem als DrawItem. Met de gebeurtenis MeasureItem kunt u de grootte van een item aangeven voordat de DrawItem gebeurtenis voor dat item plaatsvindt.

Zie de volgende onderwerpen voor meer informatie, waaronder codevoorbeelden:

Het onderdeel MenuItem vertegenwoordigt één menu-item in een MainMenu of ContextMenu onderdeel.

Als u een MenuItemwilt tekenen, stelt u de eigenschap OwnerDraw in op true en handelt u de DrawItem gebeurtenis af. Als u de grootte van het menu-item wilt aanpassen voordat de DrawItem gebeurtenis plaatsvindt, moet u de MeasureItem gebeurtenis van het item afhandelen.

Zie de volgende naslagonderwerpen voor meer informatie, waaronder codevoorbeelden:

Tabbladcontrole-besturingselement

Met besturingselement TabControl kunt u afzonderlijke tabbladen tekenen. De tekening van de eigenaar heeft alleen invloed op de tabbladen; de TabPage-inhoud wordt niet beïnvloed.

Als u elk tabblad in een TabControlwilt tekenen, stelt u de eigenschap DrawMode in op OwnerDrawFixed en verwerkt u de DrawItem gebeurtenis. Deze gebeurtenis vindt slechts eenmaal plaats voor elk tabblad wanneer het tabblad zichtbaar is in het besturingselement.

Zie de volgende naslagonderwerpen voor meer informatie, waaronder codevoorbeelden:

Knopinfoonderdeel

Met de ToolTip-component kunt u de volledige ToolTip tekenen wanneer het verschijnt.

Als u een ToolTipwilt tekenen, stelt u de eigenschap OwnerDraw in op true en handelt u de Draw gebeurtenis af. Als u de grootte van de ToolTip wilt aanpassen voordat de Draw gebeurtenis plaatsvindt, moet u de Popup gebeurtenis afhandelen en de eigenschap ToolTipSize instellen in de gebeurtenis-handler.

Zie de volgende naslagonderwerpen voor meer informatie, waaronder codevoorbeelden:

ListView-controle

Met het besturingselement ListView kunt u afzonderlijke items, subitems en kolomkoppen in het besturingselement tekenen.

Als u de eigenaar van het besturingselement wilt inschakelen, stelt u de eigenschap OwnerDraw in op true.

Als u elk item in het besturingselement wilt tekenen, moet u de DrawItem gebeurtenis afhandelen.

Als u elke subitem of kolomkop in het besturingselement wilt tekenen wanneer de eigenschap View is ingesteld op Details, moet u de gebeurtenissen DrawSubItem en DrawColumnHeader afhandelen.

Zie de volgende naslagonderwerpen voor meer informatie, waaronder codevoorbeelden:

TreeView-controle

Met het TreeView-besturingselement kunt u afzonderlijke knooppunten tekenen.

Als u alleen de tekst wilt tekenen die in elk knooppunt wordt weergegeven, stelt u de eigenschap DrawMode in op OwnerDrawText en verwerkt u de DrawNode gebeurtenis om de tekst te tekenen.

Als u alle elementen van elk knooppunt wilt tekenen, stelt u de eigenschap DrawMode in op OwnerDrawAll en verwerkt u de gebeurtenis DrawNode om te tekenen welke elementen u nodig hebt, zoals tekst, pictogrammen, selectievakjes, plus- en mintekens en lijnen die de knooppunten verbinden.

Zie de volgende naslagonderwerpen voor meer informatie, waaronder codevoorbeelden:

DataGridView-besturingselement

Met het besturingselement DataGridView kunt u afzonderlijke cellen en rijen in het besturingselement tekenen.

Als u afzonderlijke cellen wilt tekenen, handelt u de CellPainting-gebeurtenis af.

Als u afzonderlijke rijen of elementen van rijen wilt tekenen, moet u een of beide gebeurtenissen RowPrePaint en RowPostPaint afhandelen. De RowPrePaint gebeurtenis treedt op voordat de cellen in een rij worden geschilderd en de RowPostPaint gebeurtenis treedt op nadat de cellen zijn geschilderd. U kunt zowel gebeurtenissen als de CellPainting gebeurtenis afhandelen om rijachtergrond, afzonderlijke cellen en rijgrond afzonderlijk te schilderen, of u kunt specifieke aanpassingen opgeven waar u ze nodig hebt en de standaardweergave gebruiken voor andere elementen van de rij.

Zie de volgende onderwerpen voor meer informatie, waaronder codevoorbeelden:

ToolStrip-besturingselement

ToolStrip en de afgeleide besturingselementen stellen u in staat elk aspect van hun uiterlijk aan te passen.

Als u aangepaste rendering wilt bieden voor ToolStrip-besturingselementen, stelt u de eigenschap Renderer van een ToolStrip, ToolStripManager, ToolStripPanelof ToolStripContentPanel in op een ToolStripRenderer-object en verwerkt u een of meer van de vele tekenevenementen van de ToolStripRenderer-klasse. U kunt ook een eigenschap Renderer instellen op een exemplaar van uw eigen klasse dat is afgeleid van ToolStripRenderer, ToolStripProfessionalRendererof ToolStripSystemRenderer die specifieke OnEventName--methoden implementeert of overschrijft.

Zie de volgende onderwerpen voor meer informatie, waaronder codevoorbeelden:

Zie ook