次の方法で共有


新しいコントロールの作成の概要

Windows フォームでは、新しいコントロールを作成したり、継承を使用して既存のコントロールを変更することができます。 この記事では、新しいコントロールを作成する方法の違いについて説明し、プロジェクトの特定の種類のコントロールを選択する方法について説明します。

基底コントロールクラス

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

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

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

コントロールを拡張する例については、「既存のコントロール を拡張する」を参照してください。

カスタム コントロール

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

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

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

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

詳細については、「 単純なカスタム コントロールを作成する」を参照してください。

ActiveX コントロール

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

警告

ActiveX コントロールは、.NET では完全にはサポートされていません。 ActiveX コントロールは、.NET Framework で引き続き完全にサポートされます。

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

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

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

次の情報は古いですが、役に立つ場合があります。