system.windows.forms.panel - Childelemente dynamisch hinzufügen
-
Hi,
vielleicht eins vorweg: ich bin in C#/.NET noch relativ unbedarft, kenne mich dafür aber mit Java, C/C++ und diversen Toolkits wie wxWidgets bestens aus.
Folgende Problemstellung: Ich habe ein Panel, welches dynamisch - also während der Laufzeit - mit UI-Elementen gefüllt werden soll (Eingabefelder, Buttons etc).
Leider finde ich im Panel jetzt keinerlei Add()/AddChildren() Methoden oder ähnliches.
Deswegen meine Frage: wie kann ich
a) einen Layoutmanager hinzufügen, der mir die Elemente in Spalten und Zeilen unterschiedlicher Größe anordnet (ähnlich GridBagLayout bzw. wxFlexGridSizer)
b) neue UI-Elemente unter Verwendung dieses Layouts zum Panel hinzufügen?
-
Mit was arbeitest du denn? Winforms, oder WPF, oder Silverlight oder doch ASP.NET?Solche Informationen bitte immer mitgeben
-
Firefighter schrieb:
Mit was arbeitest du denn? Winforms, oder WPF, oder Silverlight oder doch ASP.NET?Solche Informationen bitte immer mitgeben
Im Titel steht system.windows.forms.panel.
@OP: Schau dir mal das TableLayoutPanel bzw FlowLayoutPanel an.
-
Hahah ich Idiot
Ok und ein Panel hat doch soweit ich weiß auch eine Children Collection da kannst du neue Kinder einfügen.
-
Hi Firefighter,
TomoT scheint mit WinForms zu arbeiten, s. Titel -)
Bei WinForms gibt es das TableLayoutPanel sowie das FlowLayoutPanel für die Anordnung von Controls.
Generell fügt man Controls mittels
panel.Controls.Add(control);
einem anderen Control (hier 'panel') hinzu.
Beim TableLayoutPanel-Control gibt es dafür dann eine spezialisierte Methode:
tableLayoutPanel.SetCellPosition(control, position);
-
Ahh ok Controls hieß das bei Forms. In WPF heißt das Children
-
Firefighter schrieb:
Ahh ok Controls hieß das bei Forms. In WPF heißt das Children
Ein Glück, dass das so schön einheitlich ist un MS sich immer treu bleibt
Aber mal im Ernst: vielen Dank, das hat mir schon weitergeholfen, es tut fast komplett so, wie es soll.
Nun muss ich nur noch rauskriegen, wie ich beim FlowLayoutPanel die anzahl der zu verwendenden Spalten festlege.
-
TomoT schrieb:
Ein Glück, dass das so schön einheitlich ist un MS sich immer treu bleibt
Darüber ärgern sich sogar MS Mitarbeiter. Das sie nicht einheitlich zwischen Forms und WPF sind, geht ja eigentlich noch, weil es zwei unterschiedliche Bibliotheken sind. Aber sie sind zum Teil nicht mal in der Bibliothek selber einheitlich
TomoT schrieb:
Nun muss ich nur noch rauskriegen, wie ich beim FlowLayoutPanel die anzahl der zu verwendenden Spalten festlege.
Sowas geht nicht, da es gar nicht der Sinn von einem Flow-Layout ist. Das sollte aber zum Beispiel aus Java bekannt sein. Ein Flow-Layout hat keine Spalten, es ordnet die Elemete immer nur nach dem vorhergehenden Element an. Wenn du Spalten und Reihen möchtest, wäre vielleicht, wie schon erwähnt wurde,
TableLayoutPanel
besser geeignet.Grüssli
-
Dravere schrieb:
Sowas geht nicht, da es gar nicht der Sinn von einem Flow-Layout ist. Das sollte aber zum Beispiel aus Java bekannt sein.
Es ist bekannt - geht bei C# aber doch:
SetFlowBreak(component, true);
Damit wird component als das element gekennzeichnet, nach dem das Layout umgebrochen werden soll.
-
TomoT schrieb:
Es ist bekannt - geht bei C# aber doch:
SetFlowBreak(component, true);
Damit wird component als das element gekennzeichnet, nach dem das Layout umgebrochen werden soll.
Ich verstehe unter "Spalte" etwas anderes, als was du damit erreichst
Grüssli