次の方法で共有


Built-In Owner-Drawing 対応するコントロール

Windows フォームの所有者描画 (カスタム描画とも呼ばれます) は、特定のコントロールの視覚的な外観を変更するための手法です。

このトピックの "control" という単語は、 Control または Componentから派生するクラスを意味するために使用されます。

通常、Windows では、コントロールの外観を決定するために BackColor などのプロパティ設定を使用して、描画が自動的に処理されます。 所有者描画では、描画プロセスを引き継ぎ、プロパティを使用して使用できない外観の要素を変更します。 たとえば、多くのコントロールを使用すると、表示されるテキストの色を設定できますが、1 色に制限されます。 所有者描画を使用すると、テキストの一部を黒で、一部を赤で表示することができます。

実際には、所有者描画はフォーム上のグラフィックスの描画に似ています。 たとえば、フォームの Paint イベントのハンドラーでグラフィックス メソッドを使用して ListBox コントロールをエミュレートできますが、すべてのユーザー操作を処理するには独自のコードを記述する必要があります。 所有者描画では、コントロールはコードを使用してその内容を描画しますが、それ以外の場合は、すべての組み込み機能を保持します。 グラフィックス メソッドを使用すると、コントロール内の各項目を描画したり、各項目の一部の側面をカスタマイズしたりしながら、各項目の他の側面に既定の外観を使用することができます。

Windows フォーム コントロールのオーナー描画

それをサポートするコントロールで所有者描画を実行するには、通常、1 つのプロパティを設定し、1 つ以上のイベントを処理します。

所有者描画をサポートするほとんどのコントロールには、OwnerDraw または DrawMode プロパティがあり、コントロールが自らを描画する際にその描画関連のイベントを発生させるかどうかを示します。

OwnerDrawまたはDrawModeプロパティを持たないコントロールには、自動的に発生する描画イベントを提供するDataGridView コントロールと、独自の描画関連イベントを持つ外部レンダリング クラスを使用して描画されるToolStrip コントロールが含まれます。

描画イベントにはさまざまな種類がありますが、コントロール内で 1 つの項目を描画するために一般的な描画イベントが発生します。 イベント ハンドラーは、描画中のアイテムと描画に使用できるツールに関する情報を含む EventArgs オブジェクトを受け取ります。 たとえば、このオブジェクトには通常、親コレクション内の項目のインデックス番号、アイテムの表示境界を示す Rectangle 、ペイント メソッドを呼び出すための Graphics オブジェクトが含まれます。 一部のイベントの場合、 EventArgs オブジェクトは、アイテムとメソッドに関する追加情報を提供し、背景やフォーカスの四角形など、既定で項目の一部を描画するために呼び出すことができます。

所有者描画のカスタマイズを含む再利用可能なコントロールを作成するには、所有者描画をサポートするコントロール クラスから派生する新しいクラスを作成します。 描画イベントを処理するのではなく、新しいクラスの適切な OnEventName メソッドまたはメソッドのオーバーライドに所有者描画コードを含めます。 コントロールのユーザーが所有者描画イベントを処理し、追加のカスタマイズを提供できるように、この場合は基本クラス OnEventName メソッドを呼び出してください。

次の Windows フォーム コントロールは、すべてのバージョンの .NET Framework での所有者描画をサポートしています。

次のコントロールは、.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 コンポーネント内の 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 コントロールのカスタム レンダリングを提供するには、RendererToolStripToolStripManager、またはToolStripPanelToolStripContentPanelプロパティをToolStripRenderer オブジェクトに設定し、ToolStripRenderer クラスによって提供される多数の描画イベントの 1 つ以上を処理します。 または、Renderer プロパティを、特定の ToolStripRendererToolStripProfessionalRenderer メソッドを実装またはオーバーライドするToolStripSystemRendererOn、またはから派生した独自のクラスのインスタンスに設定します。

コード例を含む詳細については、次のトピックを参照してください。

こちらも参照ください

  • Windows フォーム で使用する コントロール