Элементы управления Windows Forms со встроенной поддержки рисования владельцем
Рисование владельцем в Windows Forms, иначе называемое пользовательским рисованием, — это способ изменения внешнего вида определенных элементов управления.
Note
Слово «control» этого раздела используется для обозначения классов, производные от Control или Component.
Как правило, Windows обрабатывает Рисование автоматически, используя параметры свойства, такие как BackColor для определения внешнего вида элемента управления. При рисовании владельцем можно перехватить процесс рисования, изменив элементы внешнего вида, которые недоступны при использовании свойств. Например, многие элементы управления позволяют задавать цвет отображаемого текста, но вы ограничены одним цветом. Рисование владельцем позволяет, например, отображать часть текста черным цветом, а другую часть — красным.
На практике рисование владельцем аналогично рисованию графических элементов в форме. Например, можно использовать графические методы в обработчике для формы Paint событий для эмуляции ListBox
элемента управления, но вам пришлось бы писать собственный код для обработки взаимодействия с пользователем. При рисовании владельцем элемент управления использует ваш код для рисования своего содержимого, но в остальном сохраняет все свои внутренние возможности. Графические методы можно использовать для рисования каждого элемента в элементе управления или для настройки некоторых аспектов каждого элемента при использовании внешнего вида по умолчанию для других аспектов каждого элемента.
Рисование владельцем в элементах управления Windows Forms
Чтобы выполнить рисование владельцем в элементах управления, поддерживающих эту функцию, вы, как правило, задаете одно свойство и обрабатываете одно или несколько событий.
Большинство элементов управления, поддерживающих рисование владельцем, имеют свойство OwnerDraw
или DrawMode
, указывающее, будет ли элемент управления вызывать связанные с рисованием события при рисовании себя.
Элементы управления, которые не имеют свойства OwnerDraw
или DrawMode
, включают элемент управления DataGridView
, предоставляющий происходящие автоматически события рисования, и элемент управления ToolStrip
, рисуемый с помощью внешнего класса отрисовки, имеющего собственные события, связанные с рисованием.
Существует много различных типов событий рисования, однако типичное событие рисования возникает для рисования отдельного элемента внутри элемента управления. Обработчик событий получает объект EventArgs
, который содержит сведения о рисуемом элементе, и инструменты, которые можно использовать для рисования. Например, этот объект обычно содержит номер индекса элемента в его родительской коллекции Rectangle указывает границы отображения элемента и Graphics объект для вызова методов рисования. Для некоторых событий объект EventArgs
предоставляет дополнительные сведения об элементе и методах, которые можно вызвать для рисования некоторых аспектов элемента по умолчанию, таких как фон или прямоугольник фокуса.
Чтобы создать элемент управления для повторного использования, содержащий настройки рисования владельцем, создайте новый класс, производный от класса элемента управления, который поддерживает рисование владельцем. Вместо обработки событий рисования включите код рисования владельцем в переопределения для соответствующего метода или методов On
ИмяСобытия в новом классе. Убедитесь в том, что в этом случае вызывается метод или методы On
ИмяСобытия базового класса, чтобы пользователи элемента управления могли обрабатывать события рисования владельцем и выполнять дополнительные настройки.
Следующие элементы управления Windows Forms поддерживают рисование владельцем во всех версиях .NET Framework.
MenuItem (используемые MainMenu и ContextMenu)
Следующие элементы управления поддерживают рисование владельцем только в .NET Framework 2.0.
Следующие элементы управления поддерживают рисование владельцем и являются новыми в .NET Framework 2.0.
В следующих разделах приводятся дополнительные сведения для каждого из этих элементов управления.
Элементы управления ListBox и ComboBox
ListBox И ComboBox элементы управления позволяют рисовать отдельные элементы в элементе управления одного или разного размера.
Note
Несмотря на то что CheckedListBox элемент управления является производным от ListBox элемента управления, он не поддерживает рисование владельцем.
Для рисования каждого элемента тот же размер, задайте DrawMode
свойства OwnerDrawFixed и обрабатывать DrawItem
событий.
Для рисования каждого элемента с использованием другого размера, задайте DrawMode
свойства OwnerDrawVariable и обработать MeasureItem
и DrawItem
события. Событие MeasureItem
позволяет указать размер элемента, прежде чем возникнет событие DrawItem
для этого элемента.
Дополнительные сведения, включая примеры кода, см. в следующих разделах.
Компонент MenuItem
MenuItem Компонент представляет собой отдельный пункт меню в MainMenu или ContextMenu компонента.
Для рисования MenuItem, задайте его OwnerDraw
свойства true
и обработать его DrawItem
событий. Чтобы изменять размер элемента меню перед возникновением события DrawItem
, требуется обработка события MeasureItem
элемента.
Дополнительные сведения, включая примеры кода, см. в следующих разделах справочника.
Элемент управления TabControl
TabControl Элемент управления позволяет рисовать отдельные вкладки в элементе управления. Рисование владельцем влияет только на вкладки; TabPage содержимое не затрагиваются.
Для рисования каждой вкладки TabControl, задайте DrawMode
свойства OwnerDrawFixed и обрабатывать DrawItem
событий. Это событие возникает один раз для каждой вкладки, только если вкладка видна в элементе управления.
Дополнительные сведения, включая примеры кода, см. в следующих разделах справочника.
Компонент ToolTip
ToolTip Компонент позволяет рисовать всю подсказку, когда она появится.
Для рисования ToolTip, задайте его OwnerDraw
свойства true
и обработать его Draw
событий. Чтобы настроить размер ToolTip перед Draw
происходит событие, обрабатывать Popup
событий и набор ToolTipSize свойство в обработчике событий.
Дополнительные сведения, включая примеры кода, см. в следующих разделах справочника.
Элемент управления ListView
ListView Управления позволяет рисовать отдельные элементы, подпункты и заголовки столбцов в элементе управления.
Чтобы включить рисование владельцем в элементе управления, задайте для свойства OwnerDraw
значение true
.
Для рисования каждого пункта в элементе управления обработайте событие DrawItem
.
Для рисования каждого подпункта или столбца заголовка в элементе управления при View свойству Details, обрабатывать DrawSubItem
и DrawColumnHeader
события.
Дополнительные сведения, включая примеры кода, см. в следующих разделах справочника.
Элемент управления TreeView
TreeView Элемент управления позволяет рисовать отдельные узлы в элементе управления.
Чтобы рисовать только текст, отображаемый в каждом узле, задайте DrawMode
свойства OwnerDrawText и обрабатывать DrawNode
событий для рисования текста.
Чтобы рисовать все элементы каждого узла, задайте DrawMode
свойства OwnerDrawAll и обрабатывать DrawNode
событий для рисования любых требуемых, такие как текст, значки, флажки, знаки плюс и минус и линий, соединяющих узлы элементов.
Дополнительные сведения, включая примеры кода, см. в следующих разделах справочника.
Элемент управления DataGridView
DataGridView Управления позволяет рисовать отдельные ячейки и строки в элементе управления.
Для рисования отдельных ячеек обработайте событие CellPainting
.
Для рисования отдельных строк или элементов строк обработайте одно или оба события RowPrePaint
и RowPostPaint
. Событие RowPrePaint
возникает до рисования ячеек в строке, а событие RowPostPaint
— после их рисования. Можно обрабатывать оба события и событие CellPainting
для рисования фона строки, отдельных ячеек и переднего плана строки по отдельности. Кроме того, можно предоставить особые настройки в нужных местах и использовать отображение по умолчанию для других элементов строки.
Дополнительные сведения, включая примеры кода, см. в следующих разделах.
Элемент управления ToolStrip
ToolStrip и производные элементы управления позволяют настраивать все аспекты их внешнего вида.
Для обеспечения пользовательской отрисовки для ToolStrip элементов управления Renderer
свойство ToolStrip, ToolStripManager, ToolStripPanel, или ToolStripContentPanel для ToolStripRenderer
и обработать один или несколько из большого числа событий рисования, предоставляемых ToolStripRenderer
класса. Можно также задать Renderer
свойство к экземпляру свой собственный класс производным от ToolStripRenderer
, ToolStripProfessionalRenderer, или ToolStripSystemRenderer , который реализует или переопределяет определенные On
EventName методы.
Дополнительные сведения, включая примеры кода, см. в следующих разделах.