72

これらはプロジェクトに追加することができる3つの異なるものですが、私がその違いを理解しているかどうかはわかりません。たとえば、コンポーネントツールボックスでは、Form。それぞれの一般的な使用シナリオは何ですか?違いはなんですか?

5 답변


140

ユーザーコントロール、カスタムコントロール、コンポーネントの主な違いは、継承ツリーのさまざまなレベルから継承されることです。

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

MyUserControl
   |-> ContainerControl
          |-> ScrollableControl
                 |-> Control
                        |-> Component

したがって、要するに、異なるオプションを使用して異なる量の配線済み機能を得ることができます。

いつさまざまなオプションを使用しますか? (これらは考えや意見であり、真実ではありません)

  • 作成する成分あなたが提供したい場合UIなしの機能(タイマーコンポーネント、データソースなど)
  • 作成するカスタムコントロール完全な場所にコンポーネントを作成する場合視覚的外観を制御するそして、あなたは不要な機能の手荷物を望んでいません。典型的なケースは機能が限定された単純なコントロール(ボタンなど)
  • 作成するユーザーコントロールもしあなたが行くなら既存のコントロールを結合する再利用可能なビルディングブロック(リスト間でアイテムを移動できるボタン付きの2つのリストなど)に変換します。


  • ええ、理解するまでにはしばらく時間がかかりましたが、UserControl実際には "複合"コントロール(他のコントロールから作られたコントロール)ですが、カスタムコントロールは実際にはユーザーが設計したコントロールです。 - Dave Cousineau
  • カスタムと動的に描画されたグラフィックスを持つ複数のTextBoxからなるコントロールを作成する場合は、UserControl? - Nick Alexeev
  • @NickAlexeev私は数年前からwinformsの世界で多く働いていませんでしたが、これは道のりだろうと思います。 - Fredrik Mörk
  • @ FredrikM rk素敵な答え!カスタムコントロールを作成する方法を学ぶことができるサイトを提案することは可能でしょうか? - John Odom

4

これは、CustomControlとUserControlの違いです。

カスタムコントロール

疎結合のコントロールとコードとUI

コントロールから派生する

ResourceDictionaryでUIを定義する

UIはスキン可能です

動的なレイアウトをしている

異なるプロジェクトでUIを変更することができます

完全なツールボックスをサポートしています

単一のコントロールを定義する

より柔軟な

==============

ユーザーコントロール

密接に結合された制御コードとUI

UserControlから派生

UIを通常のXAMLとして定義する

子コントロールはスキン可能です

静的レイアウトを持っている

UIは固定されており、異なるプロジェクトでは異なる外観を持つことはできません

ツールボックスに追加できません

一連のコントロールを定義する

カスタムコントロールのような柔軟性はあまりありません


  • 私は同意しない:Can't be added to the toolbox - Jagoda Sokół
  • 少なくともあなたの答えを取った人工物にリンクしてください。記事/ 179442 /&lidip; - user3265613
  • この回答は、Silverlightに関する記事からコピーされました。著作権侵害であるだけでなく、SilverlightではなくWinFormsに関するコンテンツの一部が間違っています。 - Sebastian Negraszus

2

Fredrikが言っていることに加えて、一般的にコンポーネントとカスタムコントロールはプロジェクト間で再利用を計画するときに使用されます。 1つのプロジェクトでのみ使用する場合は、ユーザーコントロールを使用します。


  • なぜそうなのか?単一のプロジェクトでユーザーコントロールを使用する利点、複数のプロジェクトで使用するための制限... ...? - Camilo Martin

0

私は最後のステートメントが私の意見では正しくないと信じています。 私は、さまざまな理由でユーザーコントロールを作成します。

主な理由は、もし私が複数のコントロール 一緒にグループ化される。

最初にクラスライブラリを作成してから、ユーザーコントロールを追加します。 今私は、ユーザーコントロールの仕組みの背後にあるロジックの一部を変更する必要がある場合、私は非常に簡単に行うことができます。また、このクラスライブラリは複数回使用できます。

また、同じ高級な図書館の中で、私は自分のユーザーコントロールのいずれかに共有して使用できる複数のクラスを持つことができます。

これが私がユーザーコントロールを使用する主な理由です。 また、ユーザーコントロールやクラスライブラリを変更した場合。 一度あなたが仕事を構築する。 dllはbinフォルダー内の日付を動的に更新します。

だから私は別のプロジェクトでこれを参照している場合 これらの変更は新しいプロジェクトにも反映されます。

また、フォームと同じペイントルーチンや、フォームにロードしたものは使用しません。

したがって、ユーザーコントロールにより、非常にモジュラー化することができます そして、私は、クラスライブラリの基本クラスを共有する複数のユーザーコントロールを持つことができます... したがって、ユーザーコントロールの目的は、1つのプロジェクトのためだけではありません。その点で制限はありません。 ジェフ


-3

彼らの主な違いは、ユーザーコントロールは拡張子が.ascxのページファイルです。 単一のアプリケーションまたはプロジェクト内で使用されますが、カスタムコントロールは複数のアプリケーションで使用できるアセンブリ(dllファイル)です。


  • 質問は、ASP.NETではなく、WinFormsに関するものでした。 - Qwertie

リンクされた質問


最近の質問