Sdílet prostřednictvím


Ovládací prvky s vestavěnou podporou vykreslování vlastníkem

Výkres vlastníka v model 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, které jsou odvozeny z nebo ControlComponent.

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

V praxi se výkres vlastníka podobá kreslení grafiky ve formuláři. Můžete například 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. Při kreslení vlastníkem ovládací prvek použije váš kód k vykreslení jeho obsahu, ale jinak zachová všechny jeho 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 model 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í výkres vlastníka, má OwnerDraw nebo DrawMode vlastnost, která označuje, zda ovládací prvek při malování vyvolá událost související s výkresem nebo události.

Ovládací prvky, které nemají OwnerDraw ovládací prvek nebo DrawMode vlastnost, zahrnují DataGridView ovládací prvek, který poskytuje události kreslení, ke kterým dochází automaticky, a ToolStrip ovládací prvek, 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 která označuje hranice zobrazení položky a Graphics objekt pro volání metod malování. U některých událostí EventArgs objekt poskytuje 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 Onmetodu EventName nebo metody v nové třídě. Ujistěte se, že v tomto případě voláte metodu EventName základní třídyOn, aby uživatelé vašeho ovládacího prvku mohli zpracovávat události výkresu vlastníka a poskytovat další přizpůsobení.

Následující model Windows Forms ovládací prvky podporují výkres vlastníka ve všech verzích rozhraní .NET Framework:

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

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

Poznámka:

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

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

Pokud chcete nakreslit jednotlivé položky s jinou velikostí, nastavte DrawMode vlastnost tak, aby zpracovávala OwnerDrawVariableMeasureItem události i DrawItem události. Událost MeasureItem umožňuje určit velikost položky před událostí pro danou DrawItem 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 určité nebo ContextMenu komponentěMainMenu.

Chcete-li nakreslit MenuItem, nastavte jeho OwnerDraw vlastnost true na a zpracovat její DrawItem událost. Pokud chcete přizpůsobit velikost položky nabídky před výskytem DrawItem události, zpracujte událost položky MeasureItem .

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í TabControl prvek umožňuje kreslit jednotlivé karty v ovládacím prvku. Výkres vlastníka má vliv pouze na karty; obsah TabPage není ovlivněn.

Pokud chcete nakreslit každou kartu v objektu TabControl, nastavte DrawMode vlastnost na OwnerDrawFixed událost a zpracujte ji DrawItem . Tato událost nastane jednou pro každou kartu pouze v případě, že 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:

ToolTip – komponenta

Komponenta ToolTip umožňuje kreslit celý popis tlačítka při zobrazení.

Chcete-li nakreslit ToolTip, nastavte jeho OwnerDraw vlastnost true na a zpracovat její Draw událost. Chcete-li přizpůsobit velikost ToolTip dříve, než dojde k Draw události, zpracujte Popup událost a nastavte ToolTipSize vlastnost 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í ListView prvek umožňuje kreslit jednotlivé položky, dílčí položky a záhlaví sloupců v ovládacím prvku.

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

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

Chcete-li nakreslit každé záhlaví podsítě nebo sloupce v ovládacím prvku, pokud View je vlastnost nastavena na Details, zpracování DrawSubItem událostí a DrawColumnHeader událostí.

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

TreeView – ovládací prvek

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

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

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

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

DataGridView – ovládací prvek

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

Pokud chcete nakreslit jednotlivé buňky, zpracujte CellPainting událost.

Pokud chcete nakreslit jednotlivé řádky nebo prvky řádků, zpracujte jeden nebo oba řádky RowPrePaint a RowPostPaint 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 i CellPainting událost můžete zpracovat tak, aby se pozadí řádků, jednotlivé buňky a popředí řádků daly samostatně, nebo můžete zadat konkrétní přizpůsobení, 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.

Chcete-li poskytnout vlastní vykreslování ovládacích ToolStrip prvků, nastavte Renderer vlastnost ToolStrip, ToolStripPanelToolStripManager, nebo ToolStripContentPanel na ToolStripRenderer objekt a zpracovat jeden nebo více událostí výkresu ToolStripRenderer poskytovaných třídou. Alternativně můžete nastavit Renderer vlastnost na instanci vlastní třídy odvozené z ToolStripRenderer, ToolStripProfessionalRenderernebo ToolStripSystemRenderer , která implementuje nebo přepisuje specifické Onmetody EventName .

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

Viz také