2009-09-21 4 views
20

私は一般的な考え方を持っていますが、いくつかの明白なケースがありますが、私はいくつかのグレーの領域があります - コンポーネントからの拡張に最も適しているのはいつですか?これは私が解決しようとしている具体的な仕事の問題に関係しますが、その詳細は重要ではありません - この質問に対する一般的な答えは私にとっては十分です。コンポーネントクラスとユーザーコントロールを追加するのはいつですか?

答えて

16

WPFとWindows Formsでは、主な違いは、UserControlがコントロールのコレクションであることです。つまり、複数のコントロールから構成された再利用可能な単一のオブジェクトです。

小さなコントロールで構成された「コントロール」を作成するのではなく、新しいビヘイビアで単一のプリミティブコントロールを作成する場合は、UserControlの代わりにComponent/CustomControl/Controlを使用します。通常、コンポーネントは非視覚的な動作で、CustomControl/Controlは通常はビジュアルコントロール用です。

5

一般に、コントロールにユーザーインターフェイス(または少なくともフォームに存在しないもの)がない場合は、Componentを使用します。 UIコントロールの場合は、代わりにUser Controlを作成します。

4

私は通常、UI機能をいくつかパッケージ化したいときにのみ、Controlやそれ以上のUserControlを拡張します。コンポーネントについては、私は古典的な例であるTimerを考えています。これをデザイナにドロップし、プロパティペインで設定した後、コードの背後にプログラムでアクセスすることができます。要するに、UIを持たないオブジェクトであるバンドルされた状態や動作をデザイナーが操作できるようにするために、Componentを拡張します。

12

コンポーネントとコントロールの間には大きな違いが1つあります。コントロールにはユーザーインターフェイスがあります。すべてのコントロールもコンポーネントですが、すべてのコンポーネントがコントロールではありません。ユーザーインターフェイスを表示する必要がある場合は、通常、何らかのコントロールベース(Control、UserControl、Formなど)から派生する必要があります。 BackgroundWorkerコンポーネントのような振る舞いを持っているだけの場合は、Componentから直接派生する必要があります。

もう1つのメモ...コンポーネントとコントロールの両方をデザイン面にドロップすることができます。コンポーネントはアイコンと特殊領域のラベルとして表示され、コントロールはデザイン面に直接表示されます。しかし、あなたが使うことができる3つ目のものがあります:単純なクラスです。デザイン面のサポートが必要ない場合は、コンポーネントまたはコントロールではなく、単純なクラスを使用することをお勧めします。必要なものすべてが設計時のサポートなしで100%の純粋な動作である場合、軽量で軽量です。

関連する問題