次の方法で共有


さまざまなカスタム コントロール

.NET Framework を使用すると、新しいコントロールを開発して実装できます。 継承によって、使い慣れたユーザー コントロールと既存のコントロールの機能を拡張できます。 独自の描画を実行するカスタム コントロールを記述することもできます。

作成するコントロールの種類を決定すると、混乱を招く可能性があります。 このトピックでは、継承できるさまざまな種類のコントロールの違いについて説明し、プロジェクトの特定の種類のコントロールを選択する方法について説明します。

手記

Web フォームで使用するコントロールの作成の詳細については、「カスタム ASP.NET サーバー コントロールの開発」を参照してください。

基本制御クラス

Control クラスは、Windows フォーム コントロールの基本クラスです。 Windows フォーム アプリケーションでのビジュアル表示に必要なインフラストラクチャを提供します。

Control クラスは、次のタスクを実行して、Windows フォーム アプリケーションで視覚的な表示を提供します。

  • ウィンドウ ハンドルを公開する。

  • メッセージ ルーティングを管理します。

  • マウス イベントとキーボード イベント、およびその他の多くのユーザー インターフェイス イベントを提供します。

  • 高度なレイアウト機能を提供します。

  • ForeColorBackColorHeightWidthなど、ビジュアル表示に固有の多くのプロパティが含まれています。

  • Windows フォーム コントロールが Microsoft® ActiveX® コントロールとして機能するために必要なセキュリティとスレッドのサポートを提供します。

インフラストラクチャの多くは基底クラスによって提供されるため、独自の Windows フォーム コントロールの開発は比較的簡単です。

コントロールの種類

Windows フォームでは、複合、拡張、カスタムの 3 種類のユーザー定義コントロールがサポートされています。 次のセクションでは、各種類のコントロールについて説明し、プロジェクトで使用する種類を選択するための推奨事項を示します。

複合コントロール

複合コントロールは、共通コンテナーにカプセル化された Windows フォーム コントロールのコレクションです。 この種のコントロールは、ユーザー コントロールと呼ばれることもあります。 含まれているコントロールは、構成コントロールと呼ばれます。

複合コントロールは、含まれている各 Windows フォーム コントロールに関連付けられている固有の機能をすべて保持し、それらのプロパティを選択的に公開およびバインドできるようにします。 複合コントロールは、既定のキーボード処理機能を大幅に提供し、追加の開発作業を行う必要もありません。

たとえば、複合コントロールを構築して、データベースの顧客住所データを表示できます。 このコントロールには、データベース フィールドを表示する DataGridView コントロール、データ ソースへのバインドを処理する BindingSource、レコード内を移動するための BindingNavigator コントロールを含めることができます。 データ バインディング プロパティを選択的に公開し、アプリケーションからアプリケーションにコントロール全体をパッケージ化して再利用することもできます。 この種の複合コントロールの例については、「方法: Windows フォーム コントロールに属性を適用する」を参照してください。

複合コントロールを作成するには、UserControl クラスから派生します。 UserControl 基本クラスは、子コントロールのキーボード ルーティングを提供し、子コントロールをグループとして機能させます。 詳細については、「複合 Windows フォーム コントロールの開発」を参照してください。

推奨事項

次の場合は、UserControl クラスから継承します。

  • 複数の Windows フォーム コントロールの機能を 1 つの再利用可能な単位に結合する必要があります。

拡張コントロール

既存の Windows フォーム コントロールから継承されたコントロールを派生させることができます。 この方法では、Windows フォーム コントロールに固有のすべての機能を保持し、カスタム プロパティ、メソッド、またはその他の機能を追加することで、その機能を拡張できます。 このオプションを使用すると、基本コントロールのペイント ロジックをオーバーライドし、外観を変更してユーザー インターフェイスを拡張できます。

たとえば、ユーザーがクリックした回数を追跡する Button コントロールから派生したコントロールを作成できます。

一部のコントロールでは、基底クラスの OnPaint メソッドをオーバーライドすることで、コントロールのグラフィカル ユーザー インターフェイスにカスタムの外観を追加することもできます。 クリックを追跡する拡張ボタンの場合は、OnPaint メソッドをオーバーライドして OnPaintの基本実装を呼び出し、Button コントロールのクライアント領域の 1 隅にクリック数を描画できます。

推奨事項

次の場合に Windows フォーム コントロールから継承します。

  • 必要な機能のほとんどは、既存の Windows フォーム コントロールと既に同じです。

  • カスタム グラフィカル ユーザー インターフェイスは必要ありません。または、既存のコントロール用に新しいグラフィカル ユーザー インターフェイスを設計する必要があります。

カスタム コントロール

コントロールを作成するもう 1 つの方法は、Controlから継承することによって、実質的に最初からコントロールを作成することです。 Control クラスは、マウスやキーボード処理イベントなど、コントロールに必要なすべての基本的な機能を提供しますが、コントロール固有の機能やグラフィカル インターフェイスはありません。

Control クラスから継承してコントロールを作成するには、UserControl または既存の Windows フォーム コントロールから継承するよりもはるかに多くの思考と労力が必要です。 多くの実装が残っているため、コントロールは複合コントロールや拡張コントロールよりも柔軟性が高く、正確なニーズに合わせてコントロールを調整できます。

カスタム コントロールを実装するには、コントロールの OnPaint イベントのコードと、必要な機能固有のコードを記述する必要があります。 WndProc メソッドをオーバーライドし、Windows メッセージを直接処理することもできます。 これはコントロールを作成する最も強力な方法ですが、この手法を効果的に使用するには、Microsoft Win32® API について理解しておく必要があります。

カスタム コントロールの例として、アナログ クロックの外観と動作を複製するクロック コントロールがあります。 内部 Timer コンポーネントからの Tick イベントに応答してカスタム ペインティングが呼び出されて、時計の針が移動します。 詳細については、「方法: 単純な Windows フォーム コントロールを開発する」を参照してください。

推奨事項

次の場合は、Control クラスから継承します。

  • コントロールのカスタム グラフィカル表現を提供する必要があります。

  • 標準コントロールでは使用できないカスタム機能を実装する必要があります。

ActiveX コントロール

Windows フォーム インフラストラクチャは Windows フォーム コントロールをホストするように最適化されていますが、ActiveX コントロールは引き続き使用できます。 このタスクは Visual Studio でサポートされています。 詳細については、「方法: Windows フォームに ActiveX コントロールを追加する」を参照してください。

ウィンドウレス コントロール

Microsoft Visual Basic® 6.0 および ActiveX テクノロジは、ウィンドウなしの コントロール サポートしています。 Windows フォームでは、ウィンドウレス コントロールはサポートされていません。

カスタム デザイン エクスペリエンス

カスタムのデザイン時エクスペリエンスを実装する必要がある場合は、独自のデザイナーを作成できます。 複合コントロールの場合は、ParentControlDesigner または DocumentDesigner クラスからカスタム デザイナー クラスを派生させます。 拡張コントロールとカスタム コントロールの場合は、ControlDesigner クラスからカスタム デザイナー クラスを派生させます。

DesignerAttribute を使用して、コントロールをデザイナーに関連付けます。 詳細については、「Design-Time サポートの拡張」と「方法:Design-Time 機能を活用する Windows フォーム コントロールの作成」を参照してください。

関連項目