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 Onmetody lub metod EventName w nowej klasie. Upewnij się, że w tym przypadku wywołasz metodę lub metody klasy Onbazowej 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:

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:

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:

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ę ToolStripRendererToolStripRenderer . Alternatywnie ustaw Renderer właściwość na wystąpienie własnej klasy pochodzącej z ToolStripRendererklasy , ToolStripProfessionalRendererlub ToolStripSystemRenderer , która implementuje lub zastępuje określone Onmetody EventName .

Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy:

Zobacz też