Laden...

[erledigt] Mehrere Panels, die ineinander liegen, voneinander unabhängig machen

Erstellt von arthur_8200 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.920 Views
A
arthur_8200 Themenstarter:in
3 Beiträge seit 2013
vor 10 Jahren
[erledigt] Mehrere Panels, die ineinander liegen, voneinander unabhängig machen

Hallo,

ich möchte bei einer C# Windows Forms Anwendung mit mehreren Panels arbeiten die unabhängig voneinander sind.

Die Panels sollen also jeweils direkt in der form1 liegen und sind alle mit dem Dock-Modus "Fill" eingesellt. D.h. die Panels füllen die ganze Form1 aus. Die Panels sollten also in voller Größe unabhängig voneinander übereinander liegen. Je nachdem was der Benutzer anklickt wird dann ein Panel visible und alle anderen invisible.

Im Visual Studio kann ich zwischen den Panels wechseln indem ich das aktuelle Panel "in den Hintergrund" versetze. Damit erscheint das nächste Panel usw.

Leider habe ich eines der Panel in einem anderen Panel angelegt. Ich weiß aber nicht wie ich das umstellen kann.
Im Designer.cs sieht man es vom Code her ganz deutlich:

this.panel_eingabe.Controls.Add(this.panel_leer);

Wie kann ich also das Panel leer direkt in der Form anstatt in dem Panel eingabe anlegen?

Vielen Dank!

MfG,
Arthur

12 Beiträge seit 2013
vor 10 Jahren

Hallo artuhr_8200,
du kannst einfach
this.panel_eingabe.Controls.Add(this.panel_leer);
durch
this.Controls.Add(this.panel_leer);
ersetzen. Dann ist dein Panel direkt in deinem Form.

c#-Hacker

A
arthur_8200 Themenstarter:in
3 Beiträge seit 2013
vor 10 Jahren

Hey C#-Hacker,

vielen Dank für deinen Tipp!

Ich fürchte deine Lösung ist aber nicht ganz sauber... denn im Designer-Quellcode steht

#region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>

MfG,
Arthur

S
269 Beiträge seit 2010
vor 10 Jahren

Das ist nur ein Hinweis...

man kann (und darf) in der .Designer.cs schon Änderungen vornehmen, sollte sich aber darüber im Klaren sein, welches Ergebnis eine Aktion hat... mitunter meckert sonst der Designer rum, dass er die Form nicht mehr darstellen kann 😉 (oder sie funktioniert gar nicht mehr... je nach gemachtem Fehler)
In diesem Fall sollte das aber keinen unterschied machen, du änderst ja nur den "Parent Container" (wenn man so will ^^)

P.S.:
Der Designer soll den Anwender nur bei der Entwicklung unterstützen.
Man muss ihn nicht zwingend nutzen.

C
258 Beiträge seit 2011
vor 10 Jahren

Du kannst das ganze auch über das DocumentOutline Fenster im Designer machen ohne den Code zu verändern wenn du dich damit sicherer fühlst 😃

T
156 Beiträge seit 2012
vor 10 Jahren

Hallo Arthur_8200,

wenn Du zur Laufzeit mehrere Panels übereinander plazieren willst, von denen immer nur eines sichtbar ist, kannst Du auch im Designer nur ein Panel anlegen und beim Start per QuellCode mehrere Kopien erzeugen. In einer Schleife legst Du wie im .Designer.cs mehrere Panel an der gleichen Position an.
Die Benamung der Panel sollte dabei aber eindeutig sein.

Viele Grüße,
telfa

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo arthur_8200,

die Lösung ist sauber, wenn der geänderte Code mit Code übereinstimmt, der genauso gut vom Designer generiert sein könnte. Mit anderen Worten: Ob du eine Einstellung im Designer änderst oder ob du den Code so änderst, wie ihn der Designer generieren würde, wenn die Einstellung geändert wäre, ist vom Ergebnis her vollkommen egal. Wenn man direkt den Code ändert, sollte man halt genau wissen, was man tut und was man tun muss.

Wenn du mit dem Designer arbeitest, wären UserControls vermutlich ohnehin besser geeignet als Panels, siehe [FAQ] Assistenten/Wizards: Mit Windows Forms eine Art Frameset einer Website nachbauen.

herbivore

A
arthur_8200 Themenstarter:in
3 Beiträge seit 2013
vor 10 Jahren

Hallo nochmal an alle,

vielen Dank für eure zahlreichen Kommentare!

Haben mir sehr geholfen 👍

MfG,
Arthur