組み込みのオーナー描画サポートを備えたコントロールControls with Built-In Owner-Drawing Support

Windows フォームのオーナー描画 (カスタム描画とも呼ばれます) は、特定のコントロールの外観を変更するための手法です。Owner drawing in Windows Forms, which is also known as custom drawing, is a technique for changing the visual appearance of certain controls.

注意

このトピックの "コントロール" という語は、 ControlまたはComponentから派生したクラスを意味するために使用されます。The word "control" in this topic is used to mean classes that derive from either Control or Component.

通常、コントロールの外観を決定するためになどBackColorのプロパティ設定を使用して、ウィンドウの描画を自動的に処理します。Typically, Windows handles painting automatically by using property settings such as BackColor to determine the appearance of a control. オーナー描画では、描画プロセスを引き継いで、プロパティでは設定できない外観の要素を変更できます。With owner drawing, you take over the painting process, changing elements of appearance that are not available by using properties. たとえば、多くのコントロールでは表示されるテキストの色を設定できますが、1 つの色に制限されます。For example, many controls let you set the color of the text that is displayed, but you are limited to a single color. オーナー描画では、テキストの一部分を黒で表示し、別の部分を赤で表示する、といったことができます。Owner drawing enables you to do things like display part of the text in black and part in red.

実際には、オーナー描画はフォームでのグラフィックスの描画に似ています。In practice, owner drawing is similar to drawing graphics on a form. たとえば、フォームのPaintイベントのハンドラーでグラフィックスメソッドを使用してListBoxコントロールをエミュレートすることができますが、すべてのユーザー操作を処理する独自のコードを記述する必要があります。For example, you could use graphics methods in a handler for the form's Paint event to emulate a ListBox control, but you would have to write your own code to handle all user interaction. オーナー描画では、コントロールは独自のコードを使って内容を描画しますが、それ以外については組み込み機能がすべて保持されます。With owner drawing, the control uses your code to draw its contents but otherwise retains all its intrinsic capabilities. グラフィックス メソッドを使うと、コントロール内の各項目を描画したり、各項目の一部だけカスタマイズして他の部分は既定の外観を使ったりすることができます。You can use graphics methods to draw each item in the control or to customize some aspects of each item while you use the default appearance for other aspects of each item.

Windows フォーム コントロールでのオーナー描画Owner Drawing in Windows Forms Controls

オーナー描画をサポートしているコントロールでオーナー描画を実行するには、通常、1 つのプロパティを設定し、1 つまたは複数のイベントを処理します。To perform owner drawing in controls that support it, you will typically set one property and handle one or more events.

オーナー描画をサポートしているほとんどのコントロールには、コントロールの描画時に描画関連のイベントが発生するかどうかを示す OwnerDraw または DrawMode プロパティがあります。Most controls that support owner drawing have an OwnerDraw or DrawMode property that indicates whether the control will raise its drawing-related event or events when it paints itself.

OwnerDraw または DrawMode プロパティを持たないコントロールには、自動的に発生する描画イベントを提供する DataGridView コントロールと、独自の描画関連イベントを持つ外部レンダリング クラスを使って描画される ToolStrip コントロールが含まれます。Controls that do not have an OwnerDraw or DrawMode property include the DataGridView control, which provides drawing events that occur automatically, and the ToolStrip control, which is drawn using an external rendering class that has its own drawing-related events.

さまざまな種類の描画イベントがありますが、標準的な描画イベントはコントロール内の 1 つの項目を描画するために発生します。There are many different kinds of drawing events, but a typical drawing event occurs in order to draw a single item within a control. イベント ハンドラーは、描画される項目に関する情報と、その描画に使用できるツールを含む、EventArgs オブジェクトを受け取ります。The event handler receives an EventArgs object that contains information about the item being drawn and tools you can use to draw it. たとえば、このオブジェクトには通常、親コレクション内の項目のインデックス番号、項目Rectangleの表示境界を示す、 Graphicsおよび描画メソッドを呼び出すためのオブジェクトが含まれます。For example, this object typically contains the item's index number within its parent collection, a Rectangle that indicates the item's display boundaries, and a Graphics object for calling paint methods. 一部のイベントの EventArgs オブジェクトでは、項目に関する追加情報と、背景やフォーカス四角形などの項目の一部分を既定で描画するために呼び出すことができるメソッドが提供されます。For some events, the EventArgs object provides additional information about the item and methods that you can call to paint some aspects of the item by default, such as the background or a focus rectangle.

オーナー描画のカスタマイズを含む再利用可能なコントロールを作成するには、オーナー描画をサポートするコントロール クラスから派生する新しいクラスを作成します。To create a reusable control that contains your owner-drawn customizations, create a new class that derives from a control class that supports owner drawing. 描画イベントを処理するのではなく、新しいクラスの適切な On<イベント名> メソッドのオーバーライドにオーナー描画のコードを組み込みます。Rather than handling drawing events, include your owner-drawing code in overrides for the appropriate OnEventName method or methods in the new class. この場合、コントロールのユーザーがオーナー描画イベントを処理して追加のカスタマイズを提供できるように、基底クラスの On<イベント名> メソッドを呼び出す必要があります。Make sure that you call the base class OnEventName method or methods in this case so that users of your control can handle owner-drawing events and provide additional customization.

次の Windows フォーム コントロールは、すべてのバージョンの .NET Framework でオーナー描画をサポートします。The following Windows Forms controls support owner drawing in all versions of the .NET Framework:

次のコントロールは、.NET Framework 2.0 でのみ所有者の描画をサポートします。The following controls support owner drawing only in .NET Framework 2.0:

次のコントロールはオーナー描画をサポートしており、.NET Framework 2.0 で新しく追加されています。The following controls support owner drawing and are new in .NET Framework 2.0:

以下のセクションでは、これらの各コントロールについてさらに詳しく説明します。The following sections provide additional details for each of these controls.

ListBox コントロールと ComboBox コントロールListBox and ComboBox Controls

コントロールとコントロールを使用するとComboBox 、コントロール内の個々の項目を1つのサイズで、またはさまざまなサイズで描画できます。 ListBoxThe ListBox and ComboBox controls enable you to draw individual items in the control either all in one size, or in varying sizes.

注意

コントロールはコントロールListBoxから派生しますが、オーナー描画をサポートしていません。 CheckedListBoxAlthough the CheckedListBox control is derived from the ListBox control, it does not support owner drawing.

各項目を同じサイズで描画するにはDrawMode 、プロパティOwnerDrawFixedをに設定DrawItemし、イベントを処理します。To draw each item the same size, set the DrawMode property to OwnerDrawFixed and handle the DrawItem event.

異なるサイズを使用して各項目を描画するDrawModeにはOwnerDrawVariable 、プロパティをにMeasureItem設定DrawItemし、イベントとイベントの両方を処理します。To draw each item using a different size, set the DrawMode property to OwnerDrawVariable and handle both the MeasureItem and DrawItem events. MeasureItem イベントを使うと、項目の DrawItem イベントが発生する前に、その項目のサイズを指定できます。The MeasureItem event lets you indicate the size of an item before the DrawItem event occurs for that item.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following topics:

コンポーネントは、コンポーネントMainMenuまたはContextMenuコンポーネントの1つのメニュー項目を表します。 MenuItemThe MenuItem component represents a single menu item in a MainMenu or ContextMenu component.

を描画MenuItemするには、 OwnerDrawそのDrawItemプロパティtrueをに設定し、イベントを処理します。To draw a MenuItem, set its OwnerDraw property to true and handle its DrawItem event. DrawItem イベントが発生する前にメニュー項目のサイズをカスタマイズするには、項目のMeasureItem イベントを処理します。To customize the size of the menu item before the DrawItem event occurs, handle the item's MeasureItem event.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following reference topics:

TabControl コントロールTabControl Control

TabControlコントロールを使用すると、コントロールに個々のタブを描画できます。The TabControl control enables you to draw individual tabs in the control. オーナー描画は、タブのみに影響します。TabPageコンテンツは影響を受けません。Owner drawing affects only the tabs; the TabPage contents are not affected.

TabControl各タブを描画するには、 DrawMode DrawItemプロパティをOwnerDrawFixedに設定し、イベントを処理します。To draw each tab in a TabControl, set the DrawMode property to OwnerDrawFixed and handle the DrawItem event. このイベントは、コントロールにタブが表示されている場合にのみ、タブごとに 1 回発生します。This event occurs once for each tab only when the tab is visible in the control.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following reference topics:

ToolTip コンポーネントToolTip Component

ToolTipコンポーネントを使用すると、表示されるときにツールヒント全体を描画できます。The ToolTip component enables you to draw the entire ToolTip when it is displayed.

を描画ToolTipするには、 OwnerDrawそのDrawプロパティtrueをに設定し、イベントを処理します。To draw a ToolTip, set its OwnerDraw property to true and handle its Draw event. イベントToolTipが発生Drawする前にのサイズをカスタマイズするにはPopup 、イベントを処理ToolTipSizeし、イベントハンドラーのプロパティを設定します。To customize the size of the ToolTip before the Draw event occurs, handle the Popup event and set the ToolTipSize property in the event handler.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following reference topics:

ListView コントロールListView Control

ListViewコントロールを使用すると、コントロールに個々の項目、サブ項目、および列ヘッダーを描画できます。The ListView control enables you to draw individual items, subitems, and column headers in the control.

コントロールのオーナー描画を有効にするには、OwnerDraw プロパティを true に設定します。To enable owner drawing in the control, set the OwnerDraw property to true.

コントロール内の各項目を描画するには、DrawItem イベントを処理します。To draw each item in the control, handle the DrawItem event.

ViewプロパティがにDetails設定されている場合に、コントロール内の各サブ項目またはDrawSubItemDrawColumnHeaderヘッダーを描画するには、イベントおよびイベントを処理します。To draw each subitem or column header in the control when the View property is set to Details, handle the DrawSubItem and DrawColumnHeader events.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following reference topics:

TreeView コントロールTreeView Control

TreeViewコントロールを使用すると、コントロールに個々のノードを描画できます。The TreeView control enables you to draw individual nodes in the control.

各ノードに表示されているテキストのみを描画DrawModeするにOwnerDrawTextは、プロパティDrawNodeをに設定し、イベントを処理してテキストを描画します。To draw only the text displayed in each node, set the DrawMode property to OwnerDrawText and handle the DrawNode event to draw the text.

各ノードのすべての要素を描画するにDrawModeは、 OwnerDrawAllプロパティをにDrawNode設定し、イベントを処理して必要な要素を描画します。たとえば、テキスト、アイコン、チェックボックス、プラス記号とマイナス記号、ノードを接続する線などです。To draw all elements of each node, set the DrawMode property to OwnerDrawAll and handle the DrawNode event to draw whichever elements you need, such as text, icons, check boxes, plus and minus signs, and lines connecting the nodes.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following reference topics:

DataGridView コントロールDataGridView Control

DataGridViewコントロールを使用すると、コントロールに個々のセルと行を描画できます。The DataGridView control enables you to draw individual cells and rows in the control.

個別のセルを描画するには、CellPainting イベントを処理します。To draw individual cells, handle the CellPainting event.

個別の行または行の要素を描画するには、RowPrePaint イベントと RowPostPaint イベントの一方または両方を処理します。To draw individual rows or elements of rows, handle one or both of the RowPrePaint and RowPostPaint events. RowPrePaint イベントは行内のセルが描画される前に発生し、RowPostPaint イベントはセルが描画された後で発生します。The RowPrePaint event occurs before the cells in a row are painted, and the RowPostPaint event occurs after the cells are painted. 両方のイベントと CellPainting イベントを処理して、行の背景、個々のセル、行の前景を個別に描画できます。または、必要な部分については個別にカスタマイズを提供し、行の他の要素には既定の表示を使うこともできます。You can handle both events and the CellPainting event to paint row background, individual cells, and row foreground separately, or you can provide specific customizations where you need them and use the default display for other elements of the row.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following topics:

ToolStrip コントロールToolStrip Control

ToolStripまた、派生したコントロールを使用すると、外観の任意の側面をカスタマイズできます。ToolStrip and derived controls enable you to customize any aspect of their appearance.

ToolStripコントロールのカスタム表示を提供するにはRendererToolStripToolStripManagerToolStripPanel、またはToolStripContentPanelのプロパティをToolStripRendererオブジェクトに設定し、によって提供される多数の描画イベントの1つ以上を処理します。ToolStripRendererクラス。To provide custom rendering for ToolStrip controls, set the Renderer property of a ToolStrip, ToolStripManager, ToolStripPanel, or ToolStripContentPanel to a ToolStripRenderer object and handle one or more of the many drawing events provided by the ToolStripRenderer class. または、特定Renderer ToolStripProfessionalRenderer ToolStripSystemRenderer ToolStripRendererOn EventNameメソッドを実装またはオーバーライドする、、またはから派生した独自のクラスのインスタンスにプロパティを設定します。Alternatively, set a Renderer property to an instance of your own class derived from ToolStripRenderer, ToolStripProfessionalRenderer, or ToolStripSystemRenderer that implements or overrides specific OnEventName methods.

サンプル コードなど詳細については、次のトピックをご覧ください。For more information, including code examples, see the following topics:

関連項目See also