Элементы управления Windows Forms со встроенной поддержки рисования владельцем
Обновлен: Ноябрь 2007
Рисование владельцем в Windows Forms, также известное как пользовательское рисование, представляет собой способ изменения внешнего вида определенных элементов управления.
Примечание. |
---|
Понятие "элемент управления" в данном подразделе означает производные от Control или Component классы. |
Как правило, для определения внешнего вида элемента управления в Windows, рисование обрабатывается автоматически при помощи параметров свойств, таких как BackColor. При рисовании владельцем, процесс рисования передается пользователю, который изменяет элементы внешнего вида, недоступные при использовании свойств. Например, многие элементы управления позволяют задавать цвет отображаемого текста, но выбрать можно только один цвет. При помощи рисования владельцем часть текста может отображаться черным цветом, а часть – красным.
С практической точки зрения рисование владельцем аналогично рисованию изображений в форме. Например, графические методы в обработчике можно использовать для события Paint формы для эмуляции элемента управления ListBox, но для обработки всего взаимодействия с пользователем потребуется написать собственный код. При рисовании владельцем элемент управления использует код пользователя для рисования своего содержимого, а в противном случае сохраняет все свои существующие возможности. Графические методы можно использовать для рисования каждого элемента в элементе управления или для настройки некоторых параметров каждого элемента с использованием внешнего вида по умолчанию для других параметров каждого элемента.
Рисование владельцем в элементах управления Windows Forms
Для рисования владельцем в поддерживающих его элементах управления, как правило, задается одно свойство и обрабатывается одно или несколько событий.
Большинство элементов управления, поддерживающих рисование пользователем, имеют свойство OwnerDraw или DrawMode, определяющее инициирование элементом управления связанных с рисованием событий или событий при оформлении самого элемента управления.
Элементы управления, не имеющие свойства OwnerDraw или DrawMode, содержат элемент управления DataGridView, предоставляющий происходящие автоматически события рисования, а также элемент управления ToolStrip, рисуемый при помощи внешнего класса отрисовки с собственными событиями, связанными с рисованием.
Существует множество различных типов событий рисования, но типичное событие рисования происходит для рисования отдельного элемента внутри элемента управления. Обработчик событий получает объект EventArgs со сведениями о рисуемом элементе и инструментами, которые можно использовать для рисования элемента. Например, как правило, этот объект содержит порядковый номер элемента в его родительской коллекции Rectangle с указанием границ отображения элемента, и объект Graphics для вызова методов рисования. Для некоторых событий объект EventArgs предоставляет дополнительные сведения об элементе и методах, которые можно вызвать для рисования некоторых частей элемента по умолчанию, таких как фона или прямоугольника фокуса.
Для создания повторно используемого элемента управления, содержащего рисуемые владельцем элементы, создайте новый класс, производный от класса элемента управления, который поддерживает рисование владельцем. Вместо обработки событий рисования включите код рисования владельца в переопределяющие блоки для соответствующего метода OnEventName или методов в новом классе. В этом случае, вызовите метод OnEventName базового класса или методы, так чтобы пользователи элемента управления могли обрабатывать события рисования владельцем и выполнять дополнительные настройки.
Следующие элементы управления Windows Forms поддерживают рисование владельцем во всех версиях платформы .NET Framework:
MenuItem (используемый MainMenu и ContextMenu)
Следующие элементы управления поддерживают рисование владельцем только в .NET Framework, версия 2.0:
Следующие элементы управления поддерживают рисование владельцем только в .NET Framework, версия 2.0 и являются новыми:
В следующих разделах содержатся дополнительные сведения по каждому из перечисленных элементов управления.
Элементы управления ListBox и ComboBox
Элементы управления ListBox и ComboBox позволяют рисовать отдельные элементы в элементе управления одного или разного размера.
Примечание. |
---|
Несмотря на то, что элемент управления 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 целиком при его отображении.
Для рисования ToolTip, свойству OwnerDraw необходимо присвоить значение true и обработать его событие Draw. Чтобы изменить размер ToolTip прежде чем произойдет событие Draw, обработайте событие Popup и установите свойство ToolTipSize в обработчике событий.
Дополнительные сведения и примеры кода см. в следующих справочных разделах:
Элемент управления ListView
Элемент управления ListView позволяет рисовать отдельные пункты, подпункты и заголовки столбцов в элементе управления.
Чтобы включить рисование владельцем в элементе управления, свойству OwnerDraw присвойте значение true.
Для рисования каждого пункта в элементе управления обработайте событие DrawItem.
Для рисования каждого подпункта или заголовка столбца в элементе управления после установки значения Details, для свойства View обработайте события 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.
Дополнительные сведения и примеры кода см. в следующих подразделах:
См. также
Другие ресурсы
Элементы управления для использования в формах Windows Forms