Поделиться через


Элементы управления с поддержкой Built-In Owner-Drawing

Пользовательская отрисовка в Windows Forms, также известная как собственная отрисовка, является техникой изменения визуального вида определенных элементов управления.

Заметка

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

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

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

Пользовательская отрисовка в элементах управления Windows Forms

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

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

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

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

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

Следующие элементы управления 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, задайте для свойства 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, реализующего или переопределяющего определенные методы OnEventName.

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

См. также