komplette Form in Panel laden
-
Hi
Ich habe eine Anwendung die in 2 Bereiche aufgeteilt ist, ähnlich der Exploreransicht. Auf der linken Seite wählt der Anwender einen Bereich aus, und auf der rechten Seite soll das passende Formular angezeigt werden. Im Moment habe ich das folgendermaßen realisiert.
In die rechte Seite ein Panel-Control gesetzt, in dem ich meine mit dem Designer entworfene Formulare laden will. Ich lade das 2. Formular im Konstruktor des Hauptformulars:public partial class Form1 : Form { Form2 myForm2; public Form1() { myForm2 = new Form2(); ... } ... }
Ist es notwendig das rechte Fenster aufzubauen, lese ich die Controls einzeln aus und plaziere sie im Panel:
foreach (Control myControl in myForm2.Controls) { panel1.Controls.Add(myControl); }
Gibt es hierfür ne sauberere Möglichkeit oder habe ich keine andere Wahl das anders zu lösen?
mfg Sven
-
Ja wenn Du wirklich meinst Du willst Formulare anzeigen!
Lege Dein Hauptformular als MDI-Container aus, dann kannst Du
die anzuzeigenden Formulare als Child-Formulare anzeigen.Gruss sclearscreen
Die MSDN dazu: [url]http://search.microsoft.com/results.aspx?mkt=de-DE&setlang=de-DE&q="System.Windows.Forms"+"MDI"[/url]
-
Thx für die Antwort. Ob MDI mir etwas in meinem Fall bringt habe ich auch schon überlegt. Allerdings ist das kein klassischer Fall für MDI. Ich will nicht mehrere Dokumente gleichzeitig offen haben. Das Hauptfenster soll nur in 2 Bereicher unterteilt sein. Links und rechts, in der Mitte ein Splitter, um die Größenverhältnisse zwischen den beiden Seiten jederzeit ändern zu können. Und auf der rechten Seite muss je nach dem, was links ausgewählt ist, was anderes zu sehen soll. Nicht als extra Fenster sondern eingebettet. Die erweiterung des Hauptmenüs um das Menü des Childfenster brauche ich ebenfalls nicht.
Meine ersten Umsetzungsversuche sahen mit MDI auch nicht gerade ideal aus. Den Rahmen des rechten Fenster konnte ich zwar ausblenden und das Fenster anzeigen, und auf der linken Seite ein Treeview integrieren, allerdings ist das managen der Fenstergrößen und Position nicht gerade elegant, da ich hierfür den gesammten Code selber schreiben muss. Von der Tilebar ganz zu schweigen. Wenn ich das Treeviewelement auf der linken Seite andocke ist der Lösungsansatz zwar schon nicht schlecht, da dann die automatische skallierung von den beiden Fenstern weniger problematisch wird und auch die Tilebar funktioniert, aber aus irgendeinem Grund, wird das Treeview wirklich komplett auf der linken Seite angedockt. Sprich: Es verdeckt, die Menüleiste, die Tool- und die Statusbar. Wenn ich es noch schaffen würde das rechte Fenster irgendwie rechts im Hauptfenster anzudocken und die Höhe der linken und Seite passt, wäre ich eigentlich schon ganz glücklich.
Aber vielleicht hat ja jemand noch eine andere IdeeSven
-
Leite deine Unterformulare von UserControl und nicht von Form ab,dann packt das Unterformular als Ganzes in dein Panel.
-
Wie?
und nichtmal so das würde auch nicht reichen, das bringt das Fenster ohne titelleiste in den MDI-Container:
Child child = new Child();; child.MdiParent = this; child.WindowState = System.Windows.Forms.FormWindowState.Maximized; child.Show();
Also Du suchst eine Lösung ausser MDI dann gebe ich aber folgendes zu bedenken:
Und wenn Du ein Fehler in Deinem Code hast bekommt man ja sonst das angezeigte Fenster nichtmehr zu oder klein!mfg sclearscreen
-
Wie?
Er öffnet den Quellcode von Form2,und ändert :Form in :UserControl
-
Andorxor schrieb:
Leite deine Unterformulare von UserControl und nicht von Form ab,dann packt das Unterformular als Ganzes in dein Panel.
Ja das klingt gut daran hatte ich auch noch nicht gedacht.
Muss ich mal vermerken, vielleicht brauch man mal bei ähnlich gelagertem Problem.Gruss sclearscreen
-
Andorxor schrieb:
Wie?
Er öffnet den Quellcode von Form2,und ändert :Form in :UserControl
Das hatte sich absolut auf MDI bezogen und nicht auf Deinen Vorschlag mit dem UserControl
Wenn die Ableitung von UserControl keinen Member
MdiParent mitbringt und er möchte das so machen wie Du vorschlägst, kann er MDI sowiso abhacken.Aber UserControl finde ich okay!
Grüsse
-
Habe es nun von UserControl vererbt. Funktioniert wunderbar. Danke euch.
mfg Sven