Элементы управления со встроенной поддержкой рисования владельцем

Рисование владельцем в Windows Forms, иначе называемое пользовательским рисованием, — это способ изменения внешнего вида определенных элементов управления.

Примечание.

Слово "элемент управления" в этом разделе используется для обозначения классов, производных от Control или Component.

Как правило, Windows обрабатывает рисование автоматически, используя параметры свойства, такие как BackColor, для определения внешнего вида элемента управления. При рисовании владельцем можно перехватить процесс рисования, изменив элементы внешнего вида, которые недоступны при использовании свойств. Например, многие элементы управления позволяют задавать цвет отображаемого текста, но вы ограничены одним цветом. Рисование владельцем позволяет, например, отображать часть текста черным цветом, а другую часть — красным.

На практике рисование владельцем аналогично рисованию графических элементов в форме. Например, можно использовать графические методы в обработчике для события Paint формы для эмуляции элемента управления ListBox, однако для обработки взаимодействия с пользователем вам пришлось бы писать собственный код. При рисовании владельцем элемент управления использует ваш код для рисования своего содержимого, но в остальном сохраняет все свои внутренние возможности. Графические методы можно использовать для рисования каждого элемента в элементе управления или для настройки некоторых аспектов каждого элемента при использовании внешнего вида по умолчанию для других аспектов каждого элемента.

Рисование владельцем в элементах управления Windows Forms

Чтобы выполнить рисование владельцем в элементах управления, поддерживающих эту функцию, вы, как правило, задаете одно свойство и обрабатываете одно или несколько событий.

Большинство элементов управления, поддерживающих рисование владельцем, имеют свойство OwnerDraw или DrawMode, указывающее, будет ли элемент управления вызывать связанные с рисованием события при рисовании себя.

Элементы управления, которые не имеют свойства OwnerDraw или DrawMode, включают элемент управления DataGridView, предоставляющий происходящие автоматически события рисования, и элемент управления ToolStrip, рисуемый с помощью внешнего класса отрисовки, имеющего собственные события, связанные с рисованием.

Существует много различных типов событий рисования, однако типичное событие рисования возникает для рисования отдельного элемента внутри элемента управления. Обработчик событий получает объект EventArgs, который содержит сведения о рисуемом элементе, и инструменты, которые можно использовать для рисования. Например, этот объект обычно содержит номер индекса элемента в его родительской коллекции Rectangle, который указывает границы отображения элемента, и объект Graphics для вызова методов рисования. Для некоторых событий объект EventArgs предоставляет дополнительные сведения об элементе и методах, которые можно вызвать для рисования некоторых аспектов элемента по умолчанию, таких как фон или прямоугольник фокуса.

Чтобы создать элемент управления для повторного использования, содержащий настройки рисования владельцем, создайте новый класс, производный от класса элемента управления, который поддерживает рисование владельцем. Вместо обработки событий рисования включите код рисования владельцем в переопределения для соответствующего метода или методов OnИмяСобытия в новом классе. Убедитесь в том, что в этом случае вызывается метод или методы OnИмяСобытия базового класса, чтобы пользователи элемента управления могли обрабатывать события рисования владельцем и выполнять дополнительные настройки.

Следующие элементы управления Windows Forms поддерживают рисование владельцем во всех версиях .NET Framework.

Следующие элементы управления поддерживают рисование владельцем только в .NET Framework 2.0:

Следующие элементы управления поддерживают рисование владельцем и являются новыми в .NET Framework 2.0:

В следующих разделах приводятся дополнительные сведения для каждого из этих элементов управления.

Элементы управления ListBox и ComboBox

Элементы управления ListBox и ComboBox позволяют рисовать отдельные элементы одного или разных размеров в элементе управления.

Примечание.

Хотя элемент управления CheckedListBox является производным от ListBox, он не поддерживает рисование владельцем.

Для рисования каждого элемента того же размера задайте для свойства DrawMode значение OwnerDrawFixed, а также предусмотрите обработку события DrawItem.

Для рисования каждого элемента с использованием разных размеров задайте для свойства DrawMode значение OwnerDrawVariable, а также предусмотрите обработку событий MeasureItem и DrawItem. Событие MeasureItem позволяет указать размер элемента, прежде чем возникнет событие DrawItem для этого элемента.

Дополнительные сведения, включая примеры кода, см. в следующих разделах.

Компонент 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ИмяСобытия.

Дополнительные сведения, включая примеры кода, см. в следующих разделах.

См. также