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 On
metodu 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:
MenuItem (používané v 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
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
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 true
hodnotu .
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:
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.
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é On
metody EventName .
Další informace, včetně příkladů kódu, najdete v následujících tématech:
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro