組み込みのオーナー描画サポートを備えたコントロール
Windows フォームのオーナー描画 (カスタム描画とも呼ばれます) は、特定のコントロールの外観を変更するための手法です。
通常、Windows では、コントロールの外観を決定する BackColor などのプロパティ設定を使用して、描画を自動的に処理しています。 オーナー描画では、描画プロセスを引き継いで、プロパティでは設定できない外観の要素を変更できます。 たとえば、多くのコントロールでは表示されるテキストの色を設定できますが、1 つの色に制限されます。 オーナー描画では、テキストの一部分を黒で表示し、別の部分を赤で表示する、といったことができます。
実際には、オーナー描画はフォームでのグラフィックスの描画に似ています。 たとえば、フォームの Paint イベントのハンドラーでグラフィックス メソッドを使用して ListBox
コントロールをエミュレートできますが、すべてのユーザー操作を処理するには独自のコードを記述することが必要になります。 オーナー描画では、コントロールは独自のコードを使って内容を描画しますが、それ以外については組み込み機能がすべて保持されます。 グラフィックス メソッドを使うと、コントロール内の各項目を描画したり、各項目の一部だけカスタマイズして他の部分は既定の外観を使ったりすることができます。
Windows フォーム コントロールでのオーナー描画
オーナー描画をサポートしているコントロールでオーナー描画を実行するには、通常、1 つのプロパティを設定し、1 つまたは複数のイベントを処理します。
オーナー描画をサポートしているほとんどのコントロールには、コントロールの描画時に描画関連のイベントが発生するかどうかを示す OwnerDraw
または DrawMode
プロパティがあります。
OwnerDraw
または DrawMode
プロパティを持たないコントロールには、自動的に発生する描画イベントを提供する DataGridView
コントロールと、独自の描画関連イベントを持つ外部レンダリング クラスを使って描画される ToolStrip
コントロールが含まれます。
さまざまな種類の描画イベントがありますが、標準的な描画イベントはコントロール内の 1 つの項目を描画するために発生します。 イベント ハンドラーは、描画される項目に関する情報と、その描画に使用できるツールを含む、EventArgs
オブジェクトを受け取ります。 たとえば、このオブジェクトには、通常、その親コレクション内にある項目のインデックス番号、項目の表示境界を示す Rectangle、描画メソッドを呼び出すための Graphics オブジェクトが含まれます。 一部のイベントの EventArgs
オブジェクトでは、項目に関する追加情報と、背景やフォーカス四角形などの項目の一部分を既定で描画するために呼び出すことができるメソッドが提供されます。
オーナー描画のカスタマイズを含む再利用可能なコントロールを作成するには、オーナー描画をサポートするコントロール クラスから派生する新しいクラスを作成します。 描画イベントを処理するのではなく、新しいクラスの適切な On
<イベント名> メソッドのオーバーライドにオーナー描画のコードを組み込みます。 この場合、コントロールのユーザーがオーナー描画イベントを処理して追加のカスタマイズを提供できるように、基底クラスの On
<イベント名> メソッドを呼び出す必要があります。
次の Windows フォーム コントロールは、すべてのバージョンの .NET Framework でオーナー描画をサポートします。
MenuItem (MainMenu および ContextMenu で使用)
次のコントロールは、.NET Framework 2.0 でのみオーナー描画をサポートしています。
次のコントロールはオーナー描画をサポートしており、.NET Framework 2.0 の新機能です。
以下のセクションでは、これらの各コントロールについてさらに詳しく説明します。
ListBox コントロールと ComboBox コントロール
ListBox および ComboBoxコントロールを使用すると、コントロール内の個々のアイテムをすべて 1 つのサイズで、またはそれぞれ異なるサイズで描画できます。
注意
CheckedListBox コントロールは ListBox コントロールから派生されたものですが、オーナー描画はサポートされません。
各アイテムを同じサイズで描画するには、DrawMode
プロパティを OwnerDrawFixed に設定し、DrawItem
イベントを処理します。
各アイテムをそれぞれ異なるサイズで描画するには、DrawMode
プロパティを OwnerDrawVariable に設定し、MeasureItem
と DrawItem
の両方のイベントを処理します。 MeasureItem
イベントを使うと、項目の DrawItem
イベントが発生する前に、その項目のサイズを指定できます。
サンプル コードなど詳細については、次のトピックをご覧ください。
MenuItem コンポーネント
MainMenu または ContextMenu コンポーネント内の単一のメニュー項目は、MenuItem によって表現されます。
MenuItem を描画するには、その OwnerDraw
プロパティを true
に設定して、その DrawItem
イベントを処理します。 DrawItem
イベントが発生する前にメニュー項目のサイズをカスタマイズするには、項目のMeasureItem
イベントを処理します。
サンプル コードなど詳細については、次のトピックをご覧ください。
TabControl コントロール
TabControl コントロールを使用すると、コントロール内の個々のタブを描画できます。 オーナー描画の影響を受けるのはタブのみです。TabPage の内容は影響を受けません。
TabControl で各タブを描画するには、DrawMode
プロパティを OwnerDrawFixed に設定し、DrawItem
イベントを処理します。 このイベントは、コントロールにタブが表示されている場合にのみ、タブごとに 1 回発生します。
サンプル コードなど詳細については、次のトピックをご覧ください。
ToolTip コンポーネント
ToolTip コンポーネントを使用すると、ヒントを表示するときにその全体を描画できます。
ToolTip を描画するには、その OwnerDraw
プロパティを true
に設定して、その Draw
イベントを処理します。 Draw
イベントが発生する前に ToolTip のサイズをカスタマイズするには、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 コントロールについてカスタム レンダリングを実現するには、ToolStrip、ToolStripManager、ToolStripPanel、または ToolStripContentPanel の Renderer
プロパティを ToolStripRenderer
オブジェクトに設定し、ToolStripRenderer
クラスによって提供される多くの描画イベントの 1 つまたは複数を処理します。 または、特定の On
EventName メソッドを実装またはオーバーライドする ToolStripRenderer
、ToolStripProfessionalRenderer、または ToolStripSystemRenderer から派生した自分独自のクラスのインスタンスに Renderer
プロパティを設定します。
サンプル コードなど詳細については、次のトピックをご覧ください。
関連項目
.NET Desktop feedback