Was ist der Unterschied zwischen Benutzersteuerung, benutzerdefinierter Steuerung und Komponente?

81

Dies sind drei verschiedene Dinge, die Sie einem Projekt hinzufügen können, und ich bin mir nicht ganz sicher, ob ich den Unterschied verstehe. Sie scheinen zum Beispiel alle in der Komponenten-Toolbox zu erscheinen, wenn Sie mit a arbeiten Form. Was sind einige gängige Verwendungsszenarien für jedes von ihnen? Was ist der Unterschied?

Svish
quelle

Antworten:

159

Der Hauptunterschied zwischen Benutzersteuerung, benutzerdefinierter Steuerung und Komponente besteht darin, dass sie von verschiedenen Ebenen im Vererbungsbaum erben:

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

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

Kurz gesagt, Sie erhalten mit den verschiedenen Optionen eine unterschiedliche Menge an vorverdrahteten Funktionen.

Wann würden Sie die verschiedenen Optionen verwenden? (Dies sind Gedanken und Meinungen, keine Wahrheiten)

  • Erstellen Sie eine Komponente, wenn Sie Funktionen ohne Benutzeroberfläche bereitstellen möchten (z. B. Timer-Komponenten, Datenquellen usw.).
  • Erstellen Sie ein benutzerdefiniertes Steuerelement, wenn Sie eine Komponente erstellen möchten, bei der Sie die vollständige Kontrolle über das visuelle Erscheinungsbild haben und kein Gepäck mit unnötigen Funktionen benötigen. Typische Fälle sind einfache Steuerelemente mit eingeschränkter Funktionalität (z. B. eine Schaltfläche).
  • Erstellen Sie ein Benutzersteuerelement, wenn Sie vorhandene Steuerelemente zu wiederverwendbaren Bausteinen kombinieren möchten (z. B. zwei Listen mit Schaltflächen, mit denen Sie Elemente zwischen den Listen verschieben können).
Fredrik Mörk
quelle
15
Ja, ich habe eine Weile gebraucht, um das herauszufinden, aber es scheint, dass a UserControlwirklich ein "zusammengesetztes" Steuerelement ist (ein Steuerelement, das aus anderen Steuerelementen besteht), während ein benutzerdefiniertes Steuerelement wirklich ein benutzerdefiniertes Steuerelement ist.
Dave Cousineau
Wenn ich ein Steuerelement erstellen möchte, das aus mehreren Textfeldern mit benutzerdefinierten und dynamisch gezeichneten Grafiken besteht, sollte ich wählen UserControl?
Nick Alexeev
@NickAlexeev Ich habe seit ein paar Jahren nicht mehr viel in der Winforms-Welt gearbeitet, aber ich glaube, das wäre der richtige Weg, ja.
Fredrik Mörk
1
@ FredrikMörk Schöne Antwort! Könnten Sie möglicherweise eine Site vorschlagen, auf der wir lernen können, wie Sie benutzerdefinierte Steuerelemente erstellen?
John Odom
2

Zusätzlich zu den Aussagen von Fredrik werden im Allgemeinen Komponenten und benutzerdefinierte Steuerelemente verwendet, wenn Sie sie projektübergreifend wiederverwenden möchten. Verwenden Sie Benutzersteuerelemente, wenn Sie sie nur in einem Projekt verwenden würden.

Chad Yeates
quelle
10
Warum so? Ein Vorteil bei der Verwendung eines Benutzersteuerelements in einem einzelnen Projekt, eine Einschränkung bei der Verwendung in mehreren Projekten ...?
Camilo Martin
1

Ich glaube, die letzte Aussage ist meiner Meinung nach nicht richtig. Ich erstelle Benutzersteuerelemente aus vielen verschiedenen Gründen.

Der Hauptgrund ist, dass ich, wenn ich sage, eine Schnittstelle aus mehreren Steuerelementen entwerfe, die zusammen gruppiert sind.

Ich erstelle zuerst eine Klassenbibliothek und füge dann Benutzersteuerelemente hinzu. Wenn ich jetzt einen Teil der Logik ändern muss, die hinter der Funktionsweise der Benutzersteuerung steht, kann ich dies sehr einfach tun. Auch diese Klassenbibliothek kann mehrfach verwendet werden.

Außerdem kann ich innerhalb derselben Klassenbibliothek mehrere Klassen haben, die gemeinsam genutzt und für jedes meiner Benutzersteuerelemente verwendet werden können.

Dies ist der Hauptgrund, warum ich Benutzersteuerelemente verwende. Und wenn Sie Änderungen an Ihrem Benutzersteuerelement oder Ihrer Klassenbibliothek vornehmen. Sobald Sie den Job aufgebaut haben. Die DLL wird dynamisch im Ordner bin aktualisiert.

Wenn ich dies in einem anderen Projekt referenziere, werden diese Änderungen auch in einem neuen Projekt angezeigt.

Außerdem werden nicht die gleichen Malroutinen wie das Formular und alles, was Sie in das Formular geladen haben, verwendet.

Benutzersteuerelemente bieten uns die Möglichkeit, sehr modular zu sein. Außerdem können mehrere Benutzersteuerelemente verwendet werden, die die Basisklassen der Klassenbibliothek gemeinsam nutzen. Ein Benutzersteuerungszweck ist also nicht nur für ein Projekt bestimmt. Diesbezüglich gibt es keine Einschränkungen. Jeff

Robopro
quelle
Zu "Ich glaube, die letzte Aussage ist meiner Meinung nach nicht korrekt" - die letzte Aussage von was ? [Und es ist am besten, die Aussage in Ihrer Antwort zu zitieren, damit die Leser sofort wissen, worauf Sie sich beziehen.]
ToolmakerSteve
-5

Der Hauptunterschied zwischen ihnen - Benutzersteuerung - ist eine Auslagerungsdatei mit der Erweiterung .ascx, die nur innerhalb einer einzelnen Anwendung oder eines Projekts verwendet werden kann. Benutzerdefinierte Steuerelemente sind jedoch Assemblys (DLL-Dateien), die in mehreren Anwendungen verwendet werden können.

Himanshu Namdeo
quelle
7
Die Frage betraf WinForms, nicht ASP.NET.
Qwertie