さまざまなカスタム コントロールVarieties of Custom Controls

.NET Framework を使用して、新しいコントロールを開発し、実装できます。With the .NET Framework, you can develop and implement new controls. 継承によって、使い慣れたユーザー コントロールや既存のコントロールの機能を拡張できます。You can extend the functionality of the familiar user control as well as existing controls through inheritance. また、独自の描画を実行するカスタム コントロールを作成することもできます。You can also write custom controls that perform their own painting.

作成するコントロールの種類を決めるときに、判断に迷うことがあります。Deciding which kind of control to create can be confusing. このトピックでは、継承できる各種コントロールの違いを示し、プロジェクトに合わせて特定の種類のコントロールを選択する方法について説明します。This topic highlights the differences among the various kinds of controls from which you can inherit, and provides you with information about how to choose a particular kind of control for your project.

注意

Web フォームで使用するコントロールを作成する方法については、「カスタム ASP.NET サーバー コントロールの開発」を参照してください。For information about authoring a control to use on Web Forms, see Developing Custom ASP.NET Server Controls.

基本コントロール クラスBase Control Class

Controlクラスは、Windows フォームコントロールの基本クラスです。The Control class is the base class for Windows Forms controls. このクラスは、Windows フォーム アプリケーションでのビジュアル表示に必要なインフラストラクチャを提供します。It provides the infrastructure required for visual display in Windows Forms applications.

クラスControlは、次のタスクを実行して Windows フォームアプリケーションで視覚的な表示を提供します。The Control class performs the following tasks to provide visual display in Windows Forms applications:

  • ウィンドウ ハンドルを公開する。Exposes a window handle.

  • メッセージ ルーティングを管理する。Manages message routing.

  • マウス イベントとキーボード イベント、および他のさまざまなユーザー インターフェイス イベントを提供する。Provides mouse and keyboard events, and many other user interface events.

  • 高度なレイアウト機能を提供する。Provides advanced layout features.

  • ForeColorにはBackColor 、、Width、、など、ビジュアル表示に固有の多くのプロパティが含まれています。 HeightContains many properties specific to visual display, such as ForeColor, BackColor, Height, and Width.

  • Windows フォーム コントロールが Microsoft® ActiveX® コントロールとして機能するために必要なセキュリティとスレッドのサポートを提供する。Provides the security and threading support necessary for a Windows Forms control to act as a Microsoft® ActiveX® control.

インフラストラクチャの大部分は基本クラスによって提供されるため、独自の Windows フォーム コントロールを比較的簡単に開発できます。Because so much of the infrastructure is provided by the base class, it is relatively easy to develop your own Windows Forms controls.

コントロールの種類Kinds of Controls

Windows フォームは、複合拡張カスタムの 3 種類のユーザー定義コントロールをサポートします。Windows Forms supports three kinds of user-defined controls: composite, extended, and custom. 以下のセクションでは、各種コントロールについて説明し、プロジェクトで使用する種類を選択する際の推奨事項を示します。The following sections describe each kind of control and give recommendations for choosing the kind to use in your projects.

複合コントロールComposite Controls

複合コントロールは、共通のコンテナーにカプセル化された Windows フォーム コントロールのコレクションです。A composite control is a collection of Windows Forms controls encapsulated in a common container. この種のコントロールは、ユーザー コントロールとも呼ばれます。This kind of control is sometimes called a user control. 含まれているコントロールは、内在コントロールと呼ばれます。The contained controls are called constituent controls.

複合コントロールは、含まれている各 Windows フォーム コントロールに関連する固有の機能をすべて保持し、それらのプロパティを選択的に公開してバインドできます。A composite control holds all of the inherent functionality associated with each of the contained Windows Forms controls and enables you to selectively expose and bind their properties. また、開発者側での追加作業を必要としない多数の既定のキーボード処理機能も提供します。A composite control also provides a great deal of default keyboard handling functionality with no extra development effort on your part.

たとえば、データベースの顧客の住所データを表示する複合コントロールを作成できます。For example, a composite control could be built to display customer address data from a database. このコントロールには、 DataGridViewデータベースフィールドBindingSourceを表示するコントロール、 BindingNavigatorデータソースへのバインドを処理するためのコントロール、およびレコード間を移動するコントロールを含めることができます。This control could include a DataGridView control to display the database fields, a BindingSource to handle binding to a data source, and a BindingNavigator control to move through the records. データ バインディング プロパティを選択的に公開したり、コントロール全体をパッケージ化してアプリケーション間で再利用したりできます。You could selectively expose data binding properties, and you could package and reuse the entire control from application to application. この種類の複合コントロールの例については、「方法:Windows フォームコントロールに属性を適用します。For an example of this kind of composite control, see How to: Apply Attributes in Windows Forms Controls.

複合コントロールを作成するには、 UserControlクラスから派生させます。To author a composite control, derive from the UserControl class. 基本UserControlクラスは、子コントロールのキーボードルーティングを提供し、子コントロールがグループとして機能できるようにします。The UserControl base class provides keyboard routing for child controls and enables child controls to work as a group. 詳細については、「複合 Windows フォーム コントロールの開発」を参照してください。For more information, see Developing a Composite Windows Forms Control.

推奨事項Recommendation

次の場合に、UserControl クラスから継承します。Inherit from the UserControl class if:

  • いくつかの Windows フォーム コントロールの機能を再利用可能な 1 つの単位に結合します。You want to combine the functionality of several Windows Forms controls into a single reusable unit.

拡張コントロールExtended Controls

既存の Windows フォーム コントロールから継承されたコントロールを派生できます。You can derive an inherited control from any existing Windows Forms control. この方法では、Windows フォーム コントロールの固有の機能をすべて保持し、カスタム プロパティやカスタム メソッドなどの機能を追加してその機能を拡張できます。With this approach, you can retain all of the inherent functionality of a Windows Forms control, and then extend that functionality by adding custom properties, methods, or other features. この方法を使用して、基本コントロールの描画ロジックをオーバーライドし、そのユーザー インターフェイスの外観を変更して拡張できます。With this option, you can override the base control's paint logic, and then extend its user interface by changing its appearance.

たとえば、ユーザーがクリックした回数を追跡するButtonコントロールから派生したコントロールを作成できます。For example, you can create a control derived from the Button control that tracks how many times a user has clicked it.

コントロールによっては、基本クラスのOnPaintメソッドをオーバーライドすることによって、コントロールのグラフィカルユーザーインターフェイスにカスタムの外観を追加することもできます。In some controls, you can also add a custom appearance to the graphical user interface of your control by overriding the OnPaint method of the base class. クリックを追跡する拡張ボタンでは、 OnPaintメソッドをオーバーライドしてのOnPaint基本実装を呼び出してから、 Buttonコントロールのクライアント領域の1つの隅にクリック数を描画できます。For an extended button that tracks clicks, you can override the OnPaint method to call the base implementation of OnPaint, and then draw the click count in one corner of the Button control's client area.

推奨事項Recommendation

次の場合に、Windows フォーム コントロールから継承します。Inherit from a Windows Forms control if:

  • 必要とする機能のほとんどが、既存の Windows フォーム コントロールと同じです。Most of the functionality you need is already identical to an existing Windows Forms control.

  • カスタムのグラフィカル ユーザー インターフェイスが不要な場合、または既存のコントロールの新しいグラフィカル ユーザー インターフェイスをデザインする場合。You do not need a custom graphical user interface, or you want to design a new graphical user interface for an existing control.

カスタム コントロールCustom Controls

コントロールを作成するもう1つの方法は、からControl継承することによって最初から作成することです。Another way to create a control is to create one substantially from the beginning by inheriting from Control. クラスControlは、マウスやキーボードの処理イベントなど、コントロールに必要なすべての基本機能を提供しますが、コントロール固有の機能やグラフィカルインターフェイスは提供しません。The Control class provides all of the basic functionality required by controls, including mouse and keyboard handling events, but no control-specific functionality or graphical interface.

Controlクラスから継承することによってコントロールを作成する場合は、またはUserControl既存の Windows フォームコントロールから継承するよりもはるかに多くの思考と労力が必要です。Creating a control by inheriting from the Control class requires much more thought and effort than inheriting from UserControl or an existing Windows Forms control. 多くの実装が開発者に委ねられるため、作成されるコントロールは、複合コントロールや拡張コントロールよりも柔軟性に優れ、ニーズに合わせてコントロールを調整できます。Because a great deal of implementation is left for you, your control can have greater flexibility than a composite or extended control, and you can tailor your control to suit your exact needs.

カスタムコントロールを実装するには、必要な機能固有OnPaintのコードだけでなく、コントロールのイベントのコードも記述する必要があります。To implement a custom control, you must write code for the OnPaint event of the control, as well as any feature-specific code you need. また、メソッドをオーバーライドWndProcして、windows メッセージを直接処理することもできます。You can also override the WndProc method and handle windows messages directly. これはコントロールを作成する最も強力な方法ですが、この手法を効果的に使用するには、Microsoft Win32® API を十分に理解している必要があります。This is the most powerful way to create a control, but to use this technique effectively, you need to be familiar with the Microsoft Win32® API.

カスタム コントロールの例として、アナログ時計の外観と動作を複製した時計コントロールがあります。An example of a custom control is a clock control that duplicates the appearance and behavior of an analog clock. カスタム描画が呼び出され、内部Tick Timerコンポーネントからのイベントに応答して、時計の針が移動します。Custom painting is invoked to cause the hands of the clock to move in response to Tick events from an internal Timer component. 詳細については、「方法 :単純な Windows フォームコントロールを開発します。For more information, see How to: Develop a Simple Windows Forms Control.

推奨事項Recommendation

次の場合に、Control クラスから継承します。Inherit from the Control class if:

  • コントロールのカスタムのグラフィカル表現を提供します。You want to provide a custom graphical representation of your control.

  • 標準コントロールでは使用できないカスタムの機能を実装する必要があります。You need to implement custom functionality that is not available through standard controls.

ActiveX コントロールActiveX Controls

Windows フォーム インストラクチャは、Windows フォーム コントロールをホストするために最適化されていますが、ActiveX コントロールを使用することもできます。Although the Windows Forms infrastructure has been optimized to host Windows Forms controls, you can still use ActiveX controls. Visual Studio では、このタスクに対するサポートが用意されています。There is support for this task in Visual Studio. 詳細については、「方法 :ActiveX コントロールを Windows フォームに追加します。For more information, see How to: Add ActiveX Controls to Windows Forms.

ウィンドウなしのコントロールWindowless Controls

Microsoft Visual Basic® 6.0 と ActiveX テクノロジは、"ウィンドウなし" のコントロールをサポートします。The Microsoft Visual Basic® 6.0and ActiveX technologies support windowless controls. ウィンドウなしのコントロールは、Windows フォームではサポートされていません。Windowless controls are not supported in Windows Forms.

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

カスタムのデザイン時エクスペリエンスを実装する必要がある場合は、独自のデザイナーを作成できます。If you need to implement a custom design-time experience, you can author your own designer. 複合コントロールの場合ParentControlDesigner DocumentDesignerは、クラスまたはクラスからカスタムデザイナークラスを派生させます。For composite controls, derive your custom designer class from the ParentControlDesigner or the DocumentDesigner classes. 拡張コントロールとカスタムコントロールの場合は、 ControlDesignerクラスからカスタムデザイナークラスを派生させます。For extended and custom controls, derive your custom designer class from the ControlDesigner class.

コントロールをDesignerAttributeデザイナーに関連付けるには、を使用します。Use the DesignerAttribute to associate your control with your designer. 詳細については、「デザイン時サポート拡張」および「方法:デザイン時機能を利用する Windows フォームコントロールを作成します。For more information, see Extending Design-Time Support and How to: Create a Windows Forms Control That Takes Advantage of Design-Time Features.

関連項目See also