Formanty z wbudowaną obsługą rysowania przez właściciela
Rysunek właściciela w formularzach systemu Windows, nazywany również rysunkiem niestandardowym, jest techniką zmiany wyglądu wizualizacji niektórych kontrolek.
Uwaga
Słowo "control" w tym temacie służy do oznaczania klas, które pochodzą z Control klasy lub Component.
Zazwyczaj system Windows automatycznie obsługuje malowanie przy użyciu ustawień właściwości, takich jak BackColor określanie wyglądu kontrolki. Za pomocą rysunku właściciela przejmujesz proces malowania, zmieniając elementy wyglądu, które nie są dostępne przy użyciu właściwości. Na przykład wiele kontrolek umożliwia ustawienie koloru wyświetlanego tekstu, ale jest ograniczony do jednego koloru. Rysunek właściciela umożliwia wykonywanie takich czynności, jak wyświetlanie części tekstu w kolorze czarnym i części czerwonej.
W praktyce rysunek właściciela jest podobny do rysunku grafiki na formularzu. Na przykład można użyć metod graficznych w procedurze obsługi zdarzenia formularza Paint w celu emulowania ListBox
kontrolki, ale trzeba byłoby napisać własny kod do obsługi całej interakcji użytkownika. Za pomocą rysunku właściciela kontrolka używa kodu do rysowania jego zawartości, ale w przeciwnym razie zachowuje wszystkie jego możliwości wewnętrzne. Metody graficzne umożliwiają rysowanie każdego elementu w kontrolce lub dostosowywanie niektórych aspektów każdego elementu podczas używania domyślnego wyglądu dla innych aspektów każdego elementu.
Rysunek właściciela w kontrolkach formularzy systemu Windows
Aby wykonać rysunek właściciela w kontrolkach, które go obsługują, zazwyczaj ustawisz jedną właściwość i obsłużysz co najmniej jedno zdarzenie.
Większość kontrolek obsługujących rysunek właściciela ma OwnerDraw
właściwość lub DrawMode
, która wskazuje, czy kontrolka zgłosi zdarzenie lub zdarzenia związane z rysunkiem podczas malowania.
Kontrolki, które nie mają OwnerDraw
właściwości lub DrawMode
, obejmują kontrolkę DataGridView
, która zapewnia zdarzenia rysunku, które występują automatycznie, oraz kontrolkę ToolStrip
, która jest rysowana przy użyciu klasy renderowania zewnętrznego, która ma własne zdarzenia związane z rysunkiem.
Istnieje wiele różnych rodzajów zdarzeń rysunku, ale typowe zdarzenie rysunku występuje w celu narysowania pojedynczego elementu w kontrolce. Procedura obsługi zdarzeń odbiera EventArgs
obiekt zawierający informacje o rysowanym elemencie i narzędzia, których można użyć do narysowania. Na przykład ten obiekt zazwyczaj zawiera numer indeksu elementu w kolekcji nadrzędnej, który Rectangle wskazuje granice wyświetlania elementu i Graphics obiekt do wywoływania metod malowania. W przypadku niektórych zdarzeń obiekt zawiera dodatkowe informacje o elemencie i metodach, EventArgs
które można wywołać w celu malowania niektórych aspektów elementu domyślnie, takich jak tło lub prostokąt fokusu.
Aby utworzyć kontrolkę wielokrotnego użytku zawierającą dostosowania rysowane przez właściciela, utwórz nową klasę pochodzącą z klasy kontrolnej obsługującej rysunek właściciela. Zamiast obsługiwać zdarzenia rysunku, dołącz kod rysunku właściciela do przesłonięć dla odpowiedniej On
metody lub metod EventName w nowej klasie. Upewnij się, że w tym przypadku wywołasz metodę lub metody klasy On
bazowej EventName , aby użytkownicy kontrolki mogli obsługiwać zdarzenia rysunku właściciela i udostępniać dodatkowe dostosowania.
Następujące kontrolki Windows Forms obsługują rysunek właściciela we wszystkich wersjach programu .NET Framework:
MenuItem (używane przez MainMenu i ContextMenu)
Następujące kontrolki obsługują rysunek właściciela tylko w programie .NET Framework 2.0:
Następujące kontrolki obsługują rysunek właściciela i są nowe w programie .NET Framework 2.0:
Poniższe sekcje zawierają dodatkowe szczegóły dla każdej z tych kontrolek.
Kontrolki ListBox i ComboBox
Kontrolki ListBox i ComboBox umożliwiają rysowanie poszczególnych elementów w kontrolce w jednym rozmiarze lub w różnych rozmiarach.
Uwaga
Mimo że kontrolka CheckedListBox pochodzi z kontrolki, nie obsługuje rysunku ListBox właściciela.
Aby narysować każdy element o tym samym rozmiarze, ustaw DrawMode
właściwość na OwnerDrawFixed i obsłuż DrawItem
zdarzenie.
Aby narysować każdy element przy użyciu innego rozmiaru DrawMode
, ustaw właściwość na OwnerDrawVariable i obsłuż zarówno zdarzenia, jak MeasureItem
i DrawItem
. Zdarzenie MeasureItem
umożliwia wskazanie rozmiaru elementu przed DrawItem
wystąpieniem zdarzenia dla tego elementu.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy:
MenuItem, składnik
Składnik MenuItem reprezentuje pojedynczy element menu w elemencie MainMenu lub ContextMenu .
Aby narysować obiekt MenuItem, ustaw jej OwnerDraw
właściwość na true
wartość i obsłuż jej DrawItem
zdarzenie. Aby dostosować rozmiar elementu menu przed DrawItem
wystąpieniem zdarzenia, obsłuż zdarzenie elementu MeasureItem
.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
TabControl — Formant
Kontrolka TabControl umożliwia rysowanie poszczególnych kart w kontrolce. Rysunek właściciela ma wpływ tylko na karty; nie TabPage ma to wpływu na zawartość.
Aby narysować każdą kartę w obiekcie TabControl, ustaw DrawMode
właściwość na OwnerDrawFixed i obsłuż DrawItem
zdarzenie. To zdarzenie występuje raz dla każdej karty tylko wtedy, gdy karta jest widoczna w kontrolce.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
ToolTip — Składnik
Składnik ToolTip umożliwia rysowanie całej etykietki narzędzia po jej wyświetleniu.
Aby narysować obiekt ToolTip, ustaw jej OwnerDraw
właściwość na true
wartość i obsłuż jej Draw
zdarzenie. Aby dostosować rozmiar ToolTip obiektu przed Draw
wystąpieniem zdarzenia, obsłuż Popup
zdarzenie i ustaw ToolTipSize właściwość w procedurze obsługi zdarzeń.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
ListView — Formant
Kontrolka ListView umożliwia rysowanie poszczególnych elementów, elementów podrzędnych i nagłówków kolumn w kontrolce.
Aby włączyć rysunek właściciela w kontrolce, ustaw OwnerDraw
właściwość na true
.
Aby narysować każdy element w kontrolce, obsłuż DrawItem
zdarzenie.
Aby narysować każdy element podrzędny lub nagłówek kolumny w kontrolce, gdy View właściwość jest ustawiona na Details, obsłuż zdarzenia DrawSubItem
i DrawColumnHeader
.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
TreeView — Formant
Kontrolka TreeView umożliwia rysowanie poszczególnych węzłów w kontrolce.
Aby narysować tylko tekst wyświetlany w każdym węźle, ustaw DrawMode
właściwość na OwnerDrawText wartość i obsłuż DrawNode
zdarzenie, aby narysować tekst.
Aby narysować wszystkie elementy każdego węzła, ustaw DrawMode
właściwość na OwnerDrawAll i obsłuż DrawNode
zdarzenie, aby narysować potrzebne elementy, takie jak tekst, ikony, pola wyboru oraz znaki minus i linie łączące węzły.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
DataGridView — Formant
Kontrolka DataGridView umożliwia rysowanie pojedynczych komórek i wierszy w kontrolce.
Aby narysować poszczególne komórki, obsłuż CellPainting
zdarzenie.
Aby narysować pojedyncze wiersze lub elementy wierszy, obsłuż jeden lub oba zdarzenia RowPrePaint
i RowPostPaint
. Zdarzenie RowPrePaint
występuje przed malowanie komórek w wierszu, a RowPostPaint
zdarzenie występuje po malowania komórek. Można obsługiwać zdarzenia i CellPainting
zdarzenie, aby malować tło wiersza, poszczególne komórki i pierwszy plan wiersza oddzielnie. Można też podać konkretne dostosowania, w których są potrzebne, i użyć domyślnego wyświetlania dla innych elementów wiersza.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy:
Instrukcje: dostosowywanie wyglądu komórek w kontrolce DataGridView formularzy Windows Forms
Instrukcje: dostosowywanie wyglądu wierszy w kontrolce DataGridView formularzy Windows Forms
ToolStrip — Formant
ToolStrip i pochodne kontrolki umożliwiają dostosowanie dowolnego aspektu ich wyglądu.
Aby zapewnić renderowanie niestandardowe dla ToolStrip kontrolek, ustaw Renderer
właściwość ToolStrip, ToolStripManager, ToolStripPanellub ToolStripContentPanel na obiekt i obsłuż co najmniej jedno z wielu zdarzeń rysunku dostarczonych przez klasę ToolStripRenderer
ToolStripRenderer
. Alternatywnie ustaw Renderer
właściwość na wystąpienie własnej klasy pochodzącej z ToolStripRenderer
klasy , ToolStripProfessionalRendererlub ToolStripSystemRenderer , która implementuje lub zastępuje określone On
metody EventName .
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy:
Zobacz też
.NET Desktop feedback