Show / Hide Table of Contents

Элементы управления 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.

  • ListBox

  • ComboBox

  • MenuItem (используемые MainMenu и ContextMenu)

  • TabControl

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

  • ToolTip

  • ListView

  • TreeView

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

  • DataGridView

  • ToolStrip

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

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

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

Note

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

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

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

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

  • ListBox.DrawMode

  • ListBox.MeasureItem

  • ListBox.DrawItem

  • ComboBox.DrawMode

  • ComboBox.MeasureItem

  • ComboBox.DrawItem

  • Практическое руководство. Индивидуальное форматирование строк, отображаемых в элементе управления ComboBox

Компонент MenuItem

MenuItem Компонент представляет собой отдельный пункт меню в MainMenu или ContextMenu компонента.

Для рисования MenuItem, задайте его OwnerDraw свойства true и обработать его DrawItem событий. Чтобы изменять размер элемента меню перед возникновением события DrawItem, требуется обработка события MeasureItem элемента.

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

  • MenuItem.OwnerDraw

  • MenuItem.DrawItem

  • MenuItem.MeasureItem

Элемент управления TabControl

TabControl Элемент управления позволяет рисовать отдельные вкладки в элементе управления. Рисование владельцем влияет только на вкладки; TabPage содержимое не затрагиваются.

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

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

  • TabControl.DrawMode

  • TabControl.DrawItem

Компонент ToolTip

ToolTip Компонент позволяет рисовать всю подсказку, когда она появится.

Для рисования ToolTip, задайте его OwnerDraw свойства true и обработать его Draw событий. Чтобы настроить размер ToolTip перед Draw происходит событие, обрабатывать Popup событий и набор ToolTipSize свойство в обработчике событий.

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

  • ToolTip.OwnerDraw

  • ToolTip.Draw

  • ToolTip.Popup

Элемент управления ListView

ListView Управления позволяет рисовать отдельные элементы, подпункты и заголовки столбцов в элементе управления.

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

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

Для рисования каждого подпункта или столбца заголовка в элементе управления при View свойству Details, обрабатывать DrawSubItem и DrawColumnHeader события.

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

  • ListView.OwnerDraw

  • ListView.DrawItem

  • ListView.DrawSubItem

  • ListView.DrawColumnHeader

Элемент управления TreeView

TreeView Элемент управления позволяет рисовать отдельные узлы в элементе управления.

Чтобы рисовать только текст, отображаемый в каждом узле, задайте DrawMode свойства OwnerDrawText и обрабатывать DrawNode событий для рисования текста.

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

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

  • TreeView.DrawMode

  • TreeView.DrawNode

Элемент управления DataGridView

DataGridView Управления позволяет рисовать отдельные ячейки и строки в элементе управления.

Для рисования отдельных ячеек обработайте событие CellPainting.

Для рисования отдельных строк или элементов строк обработайте одно или оба события RowPrePaint и RowPostPaint. Событие RowPrePaint возникает до рисования ячеек в строке, а событие RowPostPaint — после их рисования. Можно обрабатывать оба события и событие CellPainting для рисования фона строки, отдельных ячеек и переднего плана строки по отдельности. Кроме того, можно предоставить особые настройки в нужных местах и использовать отображение по умолчанию для других элементов строки.

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

  • CellPainting

  • RowPrePaint

  • RowPostPaint

  • Практическое руководство. Настройка внешнего вида ячеек элемента управления DataGridView в Windows Forms

  • Практическое руководство. Настройка внешнего вида строк элемента управления DataGridView в Windows Forms

Элемент управления ToolStrip

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

Для обеспечения пользовательской отрисовки для ToolStrip элементов управления Renderer свойство ToolStrip, ToolStripManager, ToolStripPanel, или ToolStripContentPanel для ToolStripRenderer и обработать один или несколько из большого числа событий рисования, предоставляемых ToolStripRenderer класса. Можно также задать Renderer свойство к экземпляру свой собственный класс производным от ToolStripRenderer, ToolStripProfessionalRenderer, или ToolStripSystemRenderer , который реализует или переопределяет определенные On EventName методы.

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

  • ToolStripRenderer

  • Практическое руководство. Создание и определение пользовательского средства визуализации для элемента управления ToolStrip в Windows Forms

  • Практическое руководство. Пользовательская прорисовка элемента управления ToolStrip

См. также

  • Элементы управления для использования в формах Windows Forms
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX