Sdílet prostřednictvím


Ovládací prvky s podporou Built-In Owner-Drawing

Kreslení vlastníkem ve Windows Forms, které se označuje také jako vlastní výkres, je technika pro změnu vizuálního vzhledu určitých ovládacích prvků.

Poznámka

Slovo "control" v tomto tématu se používá k označení tříd odvozených z Control nebo Component.

Systém Windows obvykle zpracovává obraz automaticky pomocí nastavení vlastností, jako je BackColor k určení vzhledu ovládacího prvku. Při vlastním kreslení převezmete proces malby a změníte prvky vzhledu, které nejsou dostupné pomocí vlastností. Mnoho ovládacích prvků například umožňuje nastavit barvu zobrazeného textu, ale jste omezeni na jednu barvu. Vlastní kreslení umožňuje dělat věci, jako je zobrazení části textu černě a části červeně.

V praxi se výkres vlastníka podobá kreslení grafiky ve formuláři. Například můžete použít grafické metody v obslužné rutině pro událost formuláře Paint k emulaci ListBox ovládacího prvku, ale museli byste napsat vlastní kód pro zpracování veškeré interakce uživatele. Když je kreslení prováděno vlastníkem, ovládací prvek použije váš kód k vykreslení obsahu ovládacího prvku, ale jinak zachová všechny své vnitřní schopnosti. Pomocí grafických metod můžete nakreslit každou položku v ovládacím prvku nebo přizpůsobit některé aspekty každé položky, zatímco použijete výchozí vzhled pro jiné aspekty každé položky.

Kreslení vlastníkem v ovládacích prvcích Windows Forms

Pokud chcete provést výkres vlastníka v ovládacích prvcích, které ho podporují, obvykle nastavíte jednu vlastnost a zpracujete jednu nebo více událostí.

Většina ovládacích prvků, které podporují vlastní kreslení, má vlastnost OwnerDraw nebo DrawMode, která označuje, zda ovládací prvek při svém kreslení vyvolá události související s kreslením.

Ovládací prvky, které nemají OwnerDraw nebo DrawMode vlastnost, zahrnují ovládací prvek DataGridView, který poskytuje události výkresu, ke kterým dochází automaticky, a ovládací prvek ToolStrip, který je vykreslen pomocí třídy externího vykreslování, která má vlastní události související s výkresem.

Existuje mnoho různých druhů událostí výkresu, ale typická událost výkresu se vyskytuje, aby bylo možné nakreslit jednu položku v ovládacím prvku. Obslužná rutina události obdrží EventArgs objekt, který obsahuje informace o nakreslené položce a nástrojích, které můžete použít k jeho kreslení. Tento objekt například obvykle obsahuje číslo indexu položky v rámci nadřazené kolekce, Rectangle označující hranice zobrazení položky a objekt Graphics pro volání metod malování. U některých událostí poskytuje objekt EventArgs další informace o položce a metodách, které můžete volat k vykreslení některých aspektů položky ve výchozím nastavení, jako je pozadí nebo obdélník fokusu.

Chcete-li vytvořit opakovaně použitelný ovládací prvek, který obsahuje vaše přizpůsobení nakreslené vlastníkem, vytvořte novou třídu odvozenou od třídy ovládacího prvku, která podporuje výkres vlastníka. Místo zpracování událostí výkresu zahrňte kód výkresu vlastníka do přepsání pro příslušnou metodu nebo metody OnEventName v nové třídě. Ujistěte se, že voláte metodu nebo metody základní třídy OnEventName v tomto případě, aby uživatelé vašeho ovládacího prvku mohli zpracovávat události kreslení vlastního obsahu a poskytovat další přizpůsobení.

Následující ovládací prvky Windows Forms podporují vlastní vykreslování ve všech verzích .NET Frameworku:

Následující ovládací prvky podporují výkres vlastníka pouze v rozhraní .NET Framework 2.0:

Následující ovládací prvky podporují výkres vlastníka a jsou nové v rozhraní .NET Framework 2.0:

Následující části obsahují další podrobnosti o každém z těchto ovládacích prvků.

Ovládací prvky ListBox a ComboBox

Ovládací prvky ListBox a ComboBox umožňují kreslit jednotlivé položky v ovládacím prvku buď v jedné velikosti, nebo v různých velikostech.

Poznámka

I když je ovládací prvek CheckedListBox odvozený z ovládacího prvku ListBox, nepodporuje výkres vlastníka.

Pokud chcete nakreslit každou položku se stejnou velikostí, nastavte vlastnost DrawMode na OwnerDrawFixed a zpracujte událost DrawItem.

Pokud chcete nakreslit jednotlivé položky s jinou velikostí, nastavte vlastnost DrawMode na OwnerDrawVariable a zpracujte události MeasureItem i DrawItem. Událost MeasureItem umožňuje určit velikost položky před událostí DrawItem pro danou položku.

Další informace, včetně příkladů kódu, najdete v následujících tématech:

Komponenta MenuItem představuje jednu položku nabídky v MainMenu nebo ContextMenu komponentě.

Pokud chcete nakreslit MenuItem, nastavte jeho vlastnost OwnerDraw na true a zpracujte jeho událost DrawItem. Chcete-li přizpůsobit velikost položky nabídky před tím, než nastane událost DrawItem, zpracujte událost MeasureItem této položky.

Další informace, včetně příkladů kódu, najdete v následujících referenčních tématech:

TabControl – ovládací prvek

Ovládací prvek TabControl vám umožňuje vykreslovat jednotlivé záložky. Vlastní výkres ovlivňuje pouze karty, zatímco obsah TabPage zůstává nezměněn.

Pokud chcete nakreslit každou kartu v TabControl, nastavte vlastnost DrawMode na OwnerDrawFixed a zpracujte událost DrawItem. Tato událost se stane pouze jednou pro každou kartu, a to pouze tehdy, když je karta viditelná v ovládacím prvku.

Další informace, včetně příkladů kódu, najdete v následujících referenčních tématech:

Komponenta ToolTip

Komponenta ToolTip umožňuje při zobrazení nakreslit celý popis.

Pokud chcete nakreslit ToolTip, nastavte jeho vlastnost OwnerDraw na true a zpracujte jeho Draw událost. Pokud chcete přizpůsobit velikost ToolTip před výskytem události Draw, zpracujte událost Popup a nastavte vlastnost ToolTipSize v obslužné rutině události.

Další informace, včetně příkladů kódu, najdete v následujících referenčních tématech:

ListView – ovládací prvek

Ovládací prvek ListView umožňuje v ovládacím prvku kreslit jednotlivé položky, dílčí položky a záhlaví sloupců.

Chcete-li povolit výkres vlastníka v ovládacím prvku, nastavte vlastnost OwnerDraw na true.

Pokud chcete nakreslit každou položku v ovládacím prvku, zpracujte událost DrawItem.

Pokud chcete v ovládacím prvku nakreslit každou podsložku nebo záhlaví sloupce, když je vlastnost View nastavena na Details, ošetřete události DrawSubItem a DrawColumnHeader.

Další informace, včetně příkladů kódu, najdete v následujících referenčních tématech:

Ovládací prvek TreeView

Ovládací prvek TreeView umožňuje nakreslit jednotlivé uzly v ovládacím prvku.

Pokud chcete nakreslit pouze text zobrazený v každém uzlu, nastavte vlastnost DrawMode na OwnerDrawText a zpracujte událost DrawNode a nakreslete text.

Pokud chcete nakreslit všechny prvky každého uzlu, nastavte vlastnost DrawMode na OwnerDrawAll a zpracujte událost DrawNode tak, aby kreslila prvky, které potřebujete, například text, ikony, zaškrtávací políčka, znaménka plus a minus a čáry spojující uzly.

Další informace, včetně příkladů kódu, najdete v následujících referenčních tématech:

Ovládací prvek DataGridView

Ovládací prvek DataGridView umožňuje nakreslit jednotlivé buňky a řádky v ovládacím prvku.

Pro nakreslení jednotlivých buněk zpracujte událost CellPainting.

Pokud chcete nakreslit jednotlivé řádky nebo prvky řádků, zpracujte události RowPrePaint a RowPostPaint, nebo obě tyto události. Událost RowPrePaint nastane před vykreslením buněk v řádku a RowPostPaint událost nastane po vykreslení buněk. Události a události CellPainting můžete zpracovávat samostatně pro malování pozadí řádků, jednotlivých buněk a popředí řádku, nebo můžete poskytnout konkrétní přizpůsobení tam, kde je potřebujete, a použít výchozí zobrazení pro ostatní prvky řádku.

Další informace, včetně příkladů kódu, najdete v následujících tématech:

ToolStrip – ovládací prvek

ToolStrip a odvozené ovládací prvky umožňují přizpůsobit jakýkoli aspekt jejich vzhledu.

Pokud chcete poskytnout vlastní vykreslování ovládacích prvků ToolStrip, nastavte vlastnost Renderer u ToolStrip, ToolStripManager, ToolStripPanelnebo ToolStripContentPanel na objekt ToolStripRenderer a zpracujte jednu nebo více událostí výkresu třídou ToolStripRenderer poskytovaných. Alternativně nastavte vlastnost Renderer na instanci vlastní třídy odvozené z ToolStripRenderer, ToolStripProfessionalRenderernebo ToolStripSystemRenderer, která implementuje nebo přepisuje konkrétní OnEventName metody.

Další informace, včetně příkladů kódu, najdete v následujících tématech:

Viz také