Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 lub Component.
Zazwyczaj system Windows automatycznie obsługuje malowanie przy użyciu ustawień właściwości, takich jak BackColor w celu określenia 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 rysowanie przez właściciela jest podobne do rysowania grafiki na formularzu. Na przykład można użyć metod graficznych w procedurze obsługi dla zdarzenia Paint formularza w celu emulowania kontrolki ListBox
, 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 właściwość OwnerDraw
lub DrawMode
wskazującą, czy kontrolka zgłosi zdarzenie związane z rysunkiem, czy zdarzenia podczas malowania.
Kontrolki, które nie mają OwnerDraw
lub DrawMode
, obejmują kontrolkę DataGridView
, która udostępnia zdarzenia rysunku, które występują automatycznie, oraz kontrolkę ToolStrip
, która jest rysowana przy użyciu zewnętrznej klasy renderowania, 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. Program obsługi zdarzeń odbiera obiekt EventArgs
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, Rectangle wskazujący granice wyświetlania elementu oraz obiekt Graphics do wywoływania metod malowania. W przypadku niektórych zdarzeń obiekt EventArgs
zawiera dodatkowe informacje o elemencie i metodach, 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 metody On
EventName lub metod w nowej klasie. Upewnij się, że wywołujesz metody klasy bazowej On
EventName, aby użytkownicy Twojej kontrolki mogli obsługiwać zdarzenia związane z rysowaniem przez właściciela i zapewniać dodatkowe opcje dostosowywania.
Następujące kontrolki Windows Forms obsługują rysowanie przez właściciela we wszystkich wersjach środowiska .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.
Notatka
Mimo że kontrolka CheckedListBox pochodzi z kontrolki ListBox, nie obsługuje rysunku właściciela.
Aby narysować każdy element o tym samym rozmiarze, ustaw właściwość DrawMode
na OwnerDrawFixed i obsłuż zdarzenie DrawItem
.
Aby rysować każdy element przy użyciu innego rozmiaru, ustaw właściwość DrawMode
na OwnerDrawVariable i obsłuż zarówno zdarzenia MeasureItem
, jak i DrawItem
. Zdarzenie MeasureItem
umożliwia wskazanie rozmiaru elementu przed wystąpieniem zdarzenia DrawItem
dla tego elementu.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy:
MenuItem, komponent
Składnik MenuItem reprezentuje pojedynczy element menu w składniku MainMenu lub ContextMenu.
Aby narysować MenuItem, ustaw jego właściwość OwnerDraw
na true
i obsłuż zdarzenie DrawItem
. Aby dostosować rozmiar elementu menu przed wystąpieniem zdarzenia DrawItem
, obsłuż zdarzenie MeasureItem
elementu.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
TabControl, kontrolka
Kontrolka TabControl umożliwia rysowanie poszczególnych kart w kontrolce. Rysunek właściciela ma wpływ tylko na zakładki; zawartość TabPage nie ulega zmianie.
Aby narysować każdą kartę w TabControl, ustaw właściwość DrawMode
na OwnerDrawFixed i obsłuż zdarzenie DrawItem
. 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, komponent
Składnik ToolTip umożliwia rysowanie całej podpowiedzi, gdy jest wyświetlana.
Aby narysować ToolTip, ustaw właściwość OwnerDraw
na true
i obsłuż zdarzenie Draw
. Aby dostosować rozmiar ToolTip przed zajściem zdarzenia Draw
, obsłuż zdarzenie Popup
i ustaw właściwość ToolTipSize w handlerze zdarzeń.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy referencyjne:
Kontrolka ListView
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 właściwość OwnerDraw
na wartość true
.
Aby narysować każdy element w kontrolce, obsłuż zdarzenie DrawItem
.
Aby narysować każdy podpunkt lub nagłówek kolumny w kontrolce, gdy właściwość View została 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:
Kontrolka TreeView
Kontrolka TreeView umożliwia rysowanie poszczególnych węzłów w kontrolce.
Aby narysować tylko tekst wyświetlany w każdym węźle, ustaw właściwość DrawMode
na OwnerDrawText i obsłuż zdarzenie DrawNode
, aby narysować tekst.
Aby narysować wszystkie elementy każdego węzła, ustaw właściwość DrawMode
na OwnerDrawAll i obsłuż zdarzenie DrawNode
, 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:
Kontrolka DataGridView
Kontrolka DataGridView umożliwia rysowanie pojedynczych komórek i wierszy w kontrolce.
Aby narysować poszczególne komórki, obsługiwać zdarzenie o nazwie CellPainting
.
Aby narysować poszczególne wiersze lub elementy wierszy, obsłuż zdarzenie RowPrePaint
, RowPostPaint
lub oba. Zdarzenie RowPrePaint
występuje przed malowaniem komórek w wierszu, a zdarzenie RowPostPaint
występuje po pomalowaniu komórek. Można obsługiwać zarówno zdarzenia, jak i zdarzenie CellPainting
, 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:
Jak: dostosować wygląd komórek w kontrolce DataGridView Windows Forms
Instrukcje: dostosowywanie wyglądu wierszy w kontrolce DataGridView formularzy systemu Windows
Pasek narzędzi, kontrolka
ToolStrip i pochodne kontrolki umożliwiają dostosowanie dowolnego aspektu ich wyglądu.
Aby zapewnić renderowanie niestandardowe dla kontrolek ToolStrip, ustaw właściwość Renderer
obiektu ToolStrip, ToolStripManager, ToolStripPanellub ToolStripContentPanel na obiekt ToolStripRenderer
i obsłuż jedno lub więcej zdarzeń rysowania dostarczonych przez klasę ToolStripRenderer
. Alternatywnie ustaw właściwość Renderer
na wystąpienie własnej klasy pochodzącej z ToolStripRenderer
, ToolStripProfessionalRendererlub ToolStripSystemRenderer, która implementuje lub zastępuje określone metody On
EventName.
Aby uzyskać więcej informacji, w tym przykłady kodu, zobacz następujące tematy:
Zobacz też
- kontrolki do użycia w Windows Forms
.NET Desktop feedback