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
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
Meine Snippets bei dotnet-snippets.de:
Mails verschicken (einfach)
Systeminformationen aus der Registry lesen
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
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.
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 😃
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
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
Hallo nochmal an alle,
vielen Dank für eure zahlreichen Kommentare!
Haben mir sehr geholfen 👍
MfG,
Arthur