2009-09-21 4 views
20

Ich habe eine allgemeine Idee, und es gibt einige offensichtliche Fälle, aber es gibt auch einige Grauzonen für mich - wann ist es am besten zu verwenden, um von einer Komponente zu erweitern und wann ist es am besten, ein Benutzersteuerelement zu erstellen? Dies betrifft ein spezifisches Arbeitsproblem, das ich zu lösen versuche, aber die Besonderheiten sind nicht wichtig - eine allgemeine Antwort auf diese Frage genügt mir.Wann eine Komponentenklasse vs Benutzersteuerung hinzufügen?

Antwort

16

In WPF und Windows Forms besteht der Hauptunterschied darin, dass ein UserControl eine Sammlung von Steuerelementen ist - ein wiederverwendbares einzelnes Objekt, das aus mehreren Steuerelementen besteht.

Sie würden ein Component/CustomControl/Control anstelle eines UserControl implementieren, wenn Sie ein einfaches, primitives Steuerelement mit neuem Verhalten erstellen, anstatt ein "Steuerelement" zu erstellen, das aus kleineren Steuerelementen besteht. Komponente ist normalerweise ein nicht-visuelles Verhalten, wobei ein CustomControl/Control normalerweise für eine visuelle Kontrolle ist.

5

Im Allgemeinen würde ich Component verwenden, wenn das Steuerelement keine Benutzeroberfläche hat (oder zumindest nicht eine, die auf dem Formular vorhanden ist). Wenn es ein UI-Steuerelement ist, würde ich stattdessen erstellen.

4

Ich erweitere normalerweise Control, oder mehr von UserControl, nur wenn ich einige UI-Funktionalität verpacken will. Für Komponenten denke ich an das klassische Beispiel, den Timer. Sie kann auf den Designer gelegt, über den Eigenschaftenbereich konfiguriert und dann programmgesteuert über den dahinter liegenden Code aufgerufen werden. Kurz gesagt, ich erweitere Component, wenn ich in der Lage bin, durch den Designer einen gebündelten Zustand und ein Verhalten, ein Objekt ohne Benutzeroberfläche, zu manipulieren.

12

Es gibt einen signifikanten Unterschied zwischen einer Komponente und einem Steuerelement: Steuerelemente verfügen über eine Benutzeroberfläche. Alle Steuerelemente sind ebenfalls Komponenten, aber nicht alle Komponenten sind Steuerelemente. Wenn Sie eine Benutzerschnittstelle anzeigen müssen, ist normalerweise eine Steuerbasis (Control, UserControl, Form usw.) erforderlich. Wenn Sie nur ein Verhalten haben, beispielsweise mit der BackgroundWorker-Komponente, müssen Sie nur direkt von Component ableiten.

Ein weiterer Hinweis ... sowohl Komponenten als auch Bedienelemente können auf eine Designoberfläche fallen. Komponenten werden als Symbol und Beschriftung in einem bestimmten Bereich angezeigt, Steuerelemente erscheinen direkt auf der Entwurfsoberfläche. Es gibt jedoch eine dritte Sache, die Sie verwenden können: eine einfache Klasse. Wenn Sie keine Unterstützung für die Designoberfläche benötigen, empfehle ich eine einfache Klasse statt Component oder Control. Sie sind leichter und weniger aufgebläht, wenn Sie nur 100% reines Verhalten ohne Design-Zeit-Unterstützung benötigen.