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 On
EventName v nové třídě. Ujistěte se, že voláte metodu nebo metody základní třídy On
EventName 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:
MenuItem (používáno MainMenu a ContextMenu)
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
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:
Postupy: Přizpůsobení vzhledu buněk v ovládacím prvku Windows Forms DataGridView
Postupy: Přizpůsobení vzhledu řádků v ovládacím prvku Windows Forms DataGridView
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í On
EventName metody.
Další informace, včetně příkladů kódu, najdete v následujících tématech:
Viz také
.NET Desktop feedback