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.


  • Administrator

    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.


  • Administrator

    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


Anmelden zum Antworten