Laden...

Kann ich den Inhalt eines Forms komplett in ein anderes Form einbetten?

Erstellt von petap vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.091 Views
Thema geschlossen
P
petap Themenstarter:in
12 Beiträge seit 2009
vor 12 Jahren
Kann ich den Inhalt eines Forms komplett in ein anderes Form einbetten?

Hi

Ich schreibe an einem Program, das mehr visuelle Elemente enthält, als auf eine Seite passen. Eine logische Gruppierung ist möglich, rein technisch wäre ein TabControl die Lösung. Ich finde die aber einfach extrem hässlich. Wenn man im TabControl die Reiter durch Buttons ersetzt wird das ganze schon etwas besser. Aber die Knöpfe sind im XP Stil. Und haben für meinen Geschmack die falsche Größe, sind nicht variabel genug, etc. Das scheidet als Lösung also auch aus. Das nur als Erklärung was ungefähr mein Ziel ist.

Ich würde eigentlich gerne selber ein paar (Radio)Buttons auf meine GUI setzen, die dann die entsprechenden Elementgruppen anzeigen. Ich will aber auch nicht alle Elemente "per Hand" im Code generieren. Daher meine Frage: Kann ich Forms komplett in ein anderes Form einbetten? So, dass ich auf meiner eigentlichen "HauptGUI" einen Container habe und da per Knopfdruck ein anderes Form vollständig reinladen kann.

Alternative Lösungen für mein Problem sind natürlich auch überaus willkommen!

Beste Grüße
Jan

C
1.214 Beiträge seit 2006
vor 12 Jahren

USERCONTROL

A
764 Beiträge seit 2007
vor 12 Jahren

Es gibt auch jede Menge 'hübschere' TabControls. Z.B. bei CodeProject.

D
206 Beiträge seit 2009
vor 12 Jahren

Ich stimme Coder007 zu. UserControl's ist hier die Optimale Variante.
Siehe: Walkthrough: Authoring a User Control with Visual C#

Wer Rechtschreibfehler findet, darf sie behalten.

R
158 Beiträge seit 2007
vor 12 Jahren

Daher meine Frage: Kann ich Forms komplett in ein anderes Form einbetten? So, dass ich auf meiner eigentlichen "HauptGUI" einen Container habe und da per Knopfdruck ein anderes Form vollständig reinladen kann.

JA, das geht 😃
Jede WindowsForm hart eine Eigenschaft, die sich TopLevel nennt. Setzt man diese auf false, so kann ich die Form x-beliebig in einen anderen Container palzieren; Beispiel:

		private void button1_Click(object sender, EventArgs e)
		{
			Form1 frm1 = new Form1();
			frm1.FormBorderStyle= System.Windows.Forms.FormBorderStyle.None;
			frm1.TopLevel=false;
			frm1.Parent=groupBox1;
			frm1.Dock = DockStyle.Fill;
			frm1.Location = new Point(3,20);
			frm1.Visible=true;
			frm1.BringToFront();
		}

Als 'Übungsbeispiel' habe ich mal fix ne Solution erstellt 😉 Ist nur als reine Demo, ,um die Vorgehensweise zu zeigen.

Ich habe in vielen meiner Projekte das so gemacht, da ich nicht ständig die - in meinen Augen - unflexiblen UserControls haben wollte.

Gruß Rainer

F
10.010 Beiträge seit 2004
vor 12 Jahren

Man kann sich auch nen Knopf an die Backe nähe um einen Hut aufzuhängen, macht die Sache aber deshalb nicht Sinnhaftiger.

Was ist an einem UserControl denn unflexibler als eine Form?
Das man es jederzeit anderen Controls hinzufügen kann, das vieles dafür im FW vorgesehen ist und die Designer damit funktionieren, im Gegensatz zu deiner Herangehensweise?!?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo raiguen,

ich möchte FZelle unterstützen. Zwar lautet die Frage vordergründig "Kann ich den Inhalt eines Forms komplett in ein anderes Form einbetten?" und es ist richtig, dass sich das über die TopLevel-Eigenschaft realisieren lässt, aber aufgrund der Beschreibung des eigentlichen Ziels ergibt sich, dass hier UserControls die bessere - um nicht zu sagen die einzig richtige - Lösung des Problems sind. Hier TopLevel zu verwenden, wäre von hinten durch die Brust ins Auge.

Hallo petap,

siehe auch [FAQ] Mit Forms eine Art Frameset einer Website nachbauen? (Navigation, Wizard, Assistent).

herbivore

B
42 Beiträge seit 2010
vor 12 Jahren

also für mich hört sich das so an, als ob du sowas wie mdi suchst,
sprich wie du schon sagst, ein form als container und die anderen in dieser form,
man muss glaub nur container form auf mdiContainer setzten ( oder so ) und die
forms die drinne sind auf mdiParent auf den container referenzieren.

Thema geschlossen