Hallo,
ich hoffe ich kann einigermaßen rüberbringen wo mein Problem liegt.
Ich habe eine Anwendung mit Hauptmenü und Inhaltsbereich. Je nach Hauptmenüpunkt ändert sich der angezeigte Inhaltsbereich.
Mir fehlt im Moment noch das prinzipielle Verständnis zum Aufbau solcher Anwendungen. Ich habe jetzt ein Formular gebaut in dem das Hauptmenü angezeigt wird. Muss bzw. sollte jetzt der Contentbereich für jeden Menüpunkt in einem extra Formular erstellt werden?
Bei Webanwendungen würde ich einfach ein div basteln und dynamisch den Inhalt reinladen. Wenn ich aus Form1 nen neues Form öffne merkt der User ja, dass ein neues Formular geladen wurde. Dies soll ja gerade nicht der Fall sein. Es soll sich ja so anfühlen, als ob sich nur der Contentbereich aus dem Hauptformular ändert.
Leider mangelt es mir an Beispielprogrammen. Ich hab jede Menge Bücher hier rumfliegen wo alle Eigenschaften etc. bis ins kleinste Detail beleuchtet werden. Viel mehr würde mir aber ein Beispiel bringen, an dem einmal erläutert wird, wie eine Anwendung aufgebaut wird, die aus mehreren Bereichen besteht, wie diese geladen werden sollten etc.
Ich hoffe Ihr versteht so einigermaßen was ich meine 🙂
Viele Grüße
below
Wie ich das machen würde:
Für jede Funktion (= angezeigtes Element im Inhaltsbereich) würde ich eine extra Benutzersteuerelement mit den entsprechenden Elementen anlegen.
Dazu dann so eine Funktion, die in den Hauptmenübutton-click-events aufgerufen wird:
Die einzelnen Bunutzersteuerelemente mit den Funktionen würde ich einfach auf der Form plazieren.
enum Functionlist
{
Begruessung,
Taschenrechner,
Kalender
}
private void ShowFunction(Functionlist f)
{
if(f == Functionlist.Begruessung)
{
CorrectBorders(Begruessung1);
this.Controls.Add(Begruessung1);
}
else
this.Controls.Remove(Begruessung1);
// ......
}
private void CorrectBorders(Control C)
{
// Manuelle Positionierung, da im Designer etwas schwierig
C.Location = new Point(50,50);
C.Size = new Size(200,200);
//C.Anchor = .....
}
Vielen Dank euch beiden.
Werde mich mal an die Umsetzung mit UserControls begeben. Glaube das ist genau das was ich gesucht habe.
Ich hab gerade gesehen, dass man durch die Eigenschaft toplevel ja auch ein Form in eine Panel eines anderen Forms integrieren kann. Das macht alles ja noch viel einfacher.
Vielen Dank für die Hilfe!
Hallo below,
einfacher vielleicht, aber machen solltest du es nicht so. Das ist ein "Missbrauch" dieser Eigenschaft. UserControls sind so gesehen schon besser.
herbivore
Hmm, kannst Du mir das nochmal etwas erläutern, warum das als Missbrauch angesehen wird?
Hallo below,
TopLevel ist für Mdi-Konstruktionen relevant, nicht für Inhaltsbereiche. Für Inhaltsbereiche sind Panels und UserControls. Der Wunsch, Forms für Inhaltsbereiche einzusetzen, resultiert aus einer Schwäche des Designers Inhaltsbereiche nicht so gut zu unterstützen. Deshalb sollte man sich nicht dazu verleiten lassen Forms für Inhaltsbereiche zu "missbrauchen".
herbivore
Hm, ok, leuchtet ein. Vom Aufwand her ist es ja eigentlich auch egal, ob man ein UserControl oder ein Form nimmt. Ich wollte zuerst alle Element zur laufzeit generieren und dann in das Form laden. Blöd daran ist eben, dass man das Programm jedes Mal ausführen muss um die Änderungen zu sehen. Insofern sind UserControls die man mit dem Designer entwerfen kann ja eine schöne Angelegenheit.
Die Umstellung vom Entwickeln von Webanwendungen auf C# fällt halt noch ein bißchen schwer.
Dann mach es doch gleich richtig 😉