カスタム コントロール (Windows フォーム .NET)

Windows フォームを使用して、新しいコントロールを開発し、実装できます。 新しいユーザー コントロールの作成、継承による既存のコントロールの変更、独自の描画を実行するカスタム コントロールの作成を行うことができます。 この記事では、継承できる各種コントロールの違いを示し、プロジェクトに合わせて特定のタイプのコントロールを選択する方法について説明します。

重要

.NET 7 と .NET 6 用のデスクトップ ガイド ドキュメントは作成中です。

基本コントロール クラス

Control クラスは、Windows フォーム コントロールの基底クラスです。 Windows フォーム アプリケーションでのビジュアル表示に必要なインフラストラクチャが提供され、さらに以下の機能が提供されます。

  • ウィンドウ ハンドルを公開する。
  • メッセージ ルーティングを管理する。
  • マウス イベントとキーボード イベント、および他のさまざまなユーザー インターフェイス イベントを提供する。
  • 高度なレイアウト機能を提供する。
  • ForeColorBackColorHeightWidth など、ビジュアル表示に固有の多くのプロパティを含む。

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

独自のコントロールを作成する

作成できるカスタム コントロールには、ユーザー コントロール、拡張コントロール、カスタム コントロールの 3 種類があります。 次の表は、作成するコントロールの種類を決定するのに役立ちます。

次の場合 作成するもの
  • いくつかの Windows フォーム コントロールの機能を再利用可能な 1 つの単位に結合します。
System.Windows.Forms.UserControl から継承して、ユーザー コントロールを設計します。
  • 必要とする機能のほとんどが、既存の Windows フォーム コントロールと同じです。
  • カスタムのグラフィカル ユーザー インターフェイスが不要な場合、または既存のコントロールの新しいグラフィカル ユーザー インターフェイスをデザインする場合。
特定の Windows フォーム コントロールから継承して、コントロールを拡張します。
  • コントロールのカスタムのグラフィカル表現を提供します。
  • 標準コントロールでは使用できないカスタムの機能を実装する必要があります。
System.Windows.Forms.Control から継承して、カスタム コントロールを作成します。

ユーザー向けの制御

ユーザー コントロールは、コンシューマーに 1 つのコントロールとして提示される Windows フォーム コントロールのコレクションです。 この種のコントロールは複合コントロールと呼ばれます。 含まれているコントロールは、内在コントロールと呼ばれます。

ユーザー コントロールは、含まれている各 Windows フォーム コントロールに関連する固有の機能をすべて保持し、それらのプロパティを選択的に公開してバインドできるようにします。 ユーザー コントロールは、ユーザー側での追加の開発作業を必要としない多数の既定のキーボード処理機能も提供します。

たとえば、データベースの顧客の住所データを表示するためにユーザー コントロールを構築できます。 このコントロールには、データベース フィールドを表示するための DataGridView コントロール、データ ソースへのバインドを処理するための BindingSource、およびレコード間を移動するための BindingNavigator コントロールが含まれます。 データ バインディング プロパティを選択的に公開したり、コントロール全体をパッケージ化してアプリケーション間で再利用したりできます。

詳細については、「ユーザー コントロールの概要」を参照してください。

拡張コントロール

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

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

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

カスタム コントロール

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

Control クラスからの継承によるコントロールの作成には、UserControl や既存の Windows フォーム コントロールからの継承よりも、多くの検討と作業が必要です。 多くの実装が開発者に委ねられるため、作成されるコントロールは、複合コントロールや拡張コントロールよりも柔軟性に優れ、ニーズに合わせてコントロールを調整できます。

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

カスタム コントロールの例として、アナログ時計の外観と動作を複製した時計コントロールがあります。 内部 Timer コンポーネントからの Tick イベントに応答してカスタム ペインティングが呼び出されて、時計の針が移動します。

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

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

コントロールをデザイナーに関連付けるには、DesignerAttribute を使用します。

次の情報は最新ではありませんが、役に立ちます。