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