2010-02-19 11 views

Antwort

44

sehr Vereinfacht gesagt:

Bedienelemente ein Weg, um eine benutzerdefinierte sind, wiederverwendbare Komponente. Ein Benutzersteuerelement kann andere Steuerelemente enthalten, muss jedoch von einem Formular gehostet werden.

Windows-Formulare sind der Container für Steuerelemente, einschließlich Benutzersteuerelementen. Obwohl es viele ähnliche Attribute wie ein Benutzersteuerelement enthält, besteht der Hauptzweck darin, Steuerelemente zu hosten.

+0

Kann der Benutzer andere Benutzersteuerelemente steuern (enthalten)? –

+0

@RobertNiestroj ja können sie. – LxL

4

Ein Windows-Formular ist ein Container für Benutzersteuerelemente.

+3

so ist eine Benutzerkontrolle! –

+0

Wie fügst du ein Formular in eine Benutzerkontrolle ein? – Fredou

+1

können Sie nicht, aber Sie können sicher ein Benutzersteuerelement in ein Benutzersteuerelement versetzen. –

17

Sie haben einen viele gemeinsam, sie beide von Containern ableiten. UserControl ist jedoch als untergeordnetes Fenster gedacht und muss in einem Container platziert werden. Form wurde entwickelt, um ein Top-Level-Fenster ohne ein Elternteil zu sein.

Sie können durch Einstellen seiner TopLevel Eigenschaft auf false ein Formular in ein Kind Fenster tatsächlich drehen:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     var child = new Form2(); 
     child.TopLevel = false; 
     child.Location = new Point(10, 5); 
     child.Size = new Size(100, 100); 
     child.BackColor = Color.Yellow; 
     child.FormBorderStyle = FormBorderStyle.None; 
     child.Visible = true; 
     this.Controls.Add(child); 
    } 
} 
+3

Aber du solltest es wirklich vermeiden, IMO. :) –

+0

Es gibt ein kleines bisschen Speicher, den Sie unnötig verwenden werden, sehr kleine Erdnüsse im Vergleich zu den Kosten der Control-Klasse und vor allem des nativen Fensters. Es wäre für Microsoft sehr einfach gewesen, die TopLevel-Eigenschaft nicht verfügbar zu machen. Das Feature ist nur dunkel, die Verwendung ist in Ordnung. –

+0

Ich glaube, ich sprach vom Standpunkt der Klarheit und Zusammensetzung des Codes. Sicher, du kannst das, und sicher, es wird unterstützt, aber ich denke, mein Punkt war, dieses gute Beispiel nicht als Designmuster zu nehmen :) –

0

Der größte Unterschied form.show ist ergibt sich ein anderes Fenster, während Usercontrol doesnt wie Feature haben, ohne dass ein Aufspringen Elternteil. Die restlichen Dinge sind in beiden Steuerelementen gleich, wie von Scrollablecontrol abgeleitet.

Verwandte Themen