web-dev-qa-db-fra.com

Quelle est la différence entre le contrôle utilisateur, le contrôle personnalisé et le composant?

Ce sont trois choses différentes que vous pouvez ajouter à un projet et je ne suis pas sûr de comprendre la différence. Ils semblent tous par exemple apparaître dans la boîte à outils des composants lorsque vous travaillez avec un Form. Quels sont les scénarios d'utilisation courants pour chacun d'eux? Quelle est la différence?

78
Svish

La principale différence entre le contrôle utilisateur, le contrôle personnalisé et le composant est qu'ils héritent de différents niveaux dans l'arborescence d'héritage:

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

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

Donc, en bref, vous obtenez une quantité différente de fonctionnalités pré-câblées avec les différentes options.

Quand utiliseriez-vous les différentes options? (ce sont des pensées et des opinions, pas des vérités)

  • Créez un composant si vous souhaitez fournir fonctionnalité sans interface utilisateur (comme les composants Timer, les sources de données, ...)
  • Créez un contrôle personnalisé si vous voulez créer un composant où vous avez plein contrôle sur son apparence visuelle, et vous ne voulez aucun bagage de fonctionnalités inutiles. Les cas typiques seraient des commandes simples avec des fonctionnalités limitées (comme un bouton)
  • Créez un contrôle utilisateur si vous allez combiner les contrôles existants en blocs de construction réutilisables (tels que deux listes avec des boutons où vous pouvez déplacer des éléments entre les listes).
147
Fredrik Mörk

C'est une différence entre un CustomControl et un UserControl:

Contrôle personnalisé

Un contrôle faiblement couplé avec code et interface utilisateur

Dérive du contrôle

Définit l'interface utilisateur dans un ResourceDictionary

L'interface utilisateur est skinable

Dispose d'une disposition dynamique

L'interface utilisateur peut être modifiée dans différents projets

A un support complet de boîte à outils

Définit un seul contrôle

Plus flexible

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

Contrôle utilisateur

Un contrôle étroitement couplé avec code et interface utilisateur

Dérive de UserControl

Définit l'interface utilisateur comme XAML normal

Les contrôles enfants sont skinable

Dispose d'une disposition statique

L'interface utilisateur est fixe et ne peut pas avoir un aspect différent dans un projet différent

Ne peut pas être ajouté à la boîte à outils

Définit un ensemble de contrôles

Pas très flexible comme un contrôle personnalisé

4
Menard Laval

Pour ajouter à ce que Fredrik a dit, les composants et les contrôles personnalisés sont généralement utilisés lorsque vous prévoyez de les réutiliser dans plusieurs projets. Utilisez les contrôles utilisateur lorsque vous ne l'utiliseriez que dans un seul projet.

2
Chad Yeates

Je pense que la dernière affirmation n'est pas correcte à mon avis. Je crée des contrôles utilisateur pour de nombreuses raisons différentes.

La raison principale est que si, par exemple, je conçois une interface de plusieurs contrôles regroupés.

Je crée d'abord une bibliothèque de classes, puis j'y ajoute des contrôles utilisateur. Maintenant, si je dois changer une partie de la logique derrière le fonctionnement du contrôle utilisateur, je peux très facilement. Cette bibliothèque de classes peut également être utilisée plusieurs fois.

Toujours dans la même bibliothèque chic, je peux avoir plusieurs classes qui peuvent être partagées et utilisées pour n'importe lequel de mes contrôles utilisateur.

C'est la principale raison pour laquelle j'utilise les contrôles utilisateur. Et si vous modifiez votre contrôle utilisateur ou votre bibliothèque de classes. une fois que vous avez créé le travail. la dll sera mise à jour dynamiquement dans le dossier bin.

Donc, si je fais référence à cela dans un autre projet, ces modifications apparaîtront également dans le nouveau projet.

De plus, il n'utilise pas les mêmes routines Paint que le formulaire et tout ce que vous avez chargé sur le formulaire.

Ainsi, les contrôles utilisateur nous donnent la possibilité d'être très modulaires Et je peux avoir plusieurs contrôles utilisateur qui partagent les classes de base de la bibliothèque de classes ... Donc, un objectif de contrôle utilisateur n'est tout simplement pas pour un seul projet. Il n'a pas de limites à cet égard. Jeff

0
Robopro