Dynamisch ersteltes StackPanel ansprechen

  • WPF

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Dynamisch ersteltes StackPanel ansprechen

    Hallo

    ich möchte einen Button in einem dynamisch generierten StackPanel einfügen. Das habe ich bisher

    C#-Quellcode

    1. newStack[i] = new StackPanel();
    2. newStack[i].Name = "newStack" + i;
    3. ..........
    4. NewStackNr = "newStack" + i;
    5. newStackNr.Children.Add(newButton);



    blos direkt läst es sich nicht ansprechen?

    Thema verschoben. ~Trade

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()

    @paq Büschn weng.
    Wie sind newStack, NewStackNr, ia deklariert?
    Und
    Falls Du System.Windows.Controls.StackPanel meinst, bist Du hier falsch, das gehört nach WPF.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    i (ia) ist eine vorlaufende Nr als int
    NewStackNr hat noch keine

    Ich meine einen Dymaisch erstelten StackPanel einen Button hinzufügen

    vereinfacht so

    C#-Quellcode

    1. i = 1;
    2. VARIABLE = "Name" + i;
    3. VARIABLE.Children.Add(newBtn[i]);



    ergibt jetzt ganz blöd

    C#-Quellcode

    1. Name1.Children.Add(newBtn[i]);

    ich hatte es mit C# gekenzeichnet, und es war nie die rede von WinForms ???

    der StackPanel wird mit c# dynamisch erzeugt und ich möchte diesen ansprechen, Sie beispiel

    C#-Quellcode

    1. ​i = 1;
    2. VARIABLE = "Name" + i;
    3. VARIABLE.Children.Add(newBtn[i]);



    für mich ist das ein c# bereich da er dynamisch erzeugt wird

    C#-Quellcode

    1. ​newStack[i] = new StackPanel();
    2. newStack[i].Orientation = Orientation.Horizontal;
    3. newStack[i].Name = "newStack" + i;



    das ist c#?
    das erzeugt ein StackPanel?

    Das ganze läuft in einer schleife, erzeugt zB 5 solcher StackPanel diese würde ich gerne jeweils einem Button hinzufügen. Problem dabei wir kann ich das StackPanel anwählen?

    C#-Quellcode

    1. StackPanelName.Children.Add(newBtn[x]);
    fügt einen Button dem StackPanel mit dem namen "StackPanelName" hinzu, blos solte der "StackPanelName" aus einer Variablen kommen.

    sprich

    C#-Quellcode

    1. ​i = 1;
    2. VARIABLE = "Name" + i;
    3. VARIABLE.Children.Add(newBtn[i]);


    wäre dann

    C#-Quellcode

    1. Name1.Children.Add(newBtn[i]);
    Klicke mal in der Zeile newStack[i] = new StackPanel(); mit der rechten Maustaste auf StackPanel und wähle dann "Gehe zu Definition".
    Jetzt öffnet sich höchst wahrscheinlich der Objektkatalog.
    Scrolle dort nach oben, bis Du die Assembly siehst, in der die StackPanel-Klasse deklariert ist. Das müsste PresentationFramework sein. Ist das der Fall, handelt es sich um WPF (WPF steht für Windows Presentation Framework).
    Beispiel:


    Ob Du nun mit C# oder VB programmierst, ist für diese Klassifizierung egal. Ob WinForms oder WPF entscheidet sich (in den meisten Fällen) dadurch, ob Du beim Erstellen des Projektes "Windows Forms-Anwendung" oder "WPF-Anwendung" auswählst:
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    ErfinderDesRades schrieb:

    @TE: Tut mir leid, ich kann dir nicht helfen. StackPanel ausserhalb von Wpf ist mir nicht bekannt. Google mal "StackPanel", und du wirst sehen: Alle Treffer behandeln das Wpf-StackPanel.


    ja es ist ein StackPanel aus WPF der über C# erzeugt wird, das ganze spielt sich hier aber nicht im xaml bereich ab sondern im C# bereich

    hängt euch jetzt bitte nicht am WPF-StackPanel aus, das ganze könnte auch ein Butten sein


    Es geht mir nur um diese Zeile eigentlich

    C#-Quellcode

    1. ​VARIABLE.Children.Add(newBtn[i]);
    normal ist der erste wert ja ein Fester Name, bei mir müste er aber eine Variable sein

    paq schrieb:

    ja es ist WPF

    Na also! Es ist für uns wichtig, das zu wissen. Denn wenn wir raten, dass Du hier das StackPanel aus WPF meinst, Du aber tatsächlich was ganz anderes verwendest, dann können wir nie auf einen grünen Zweig kommen.

    Also, Du hast jetzt die Wahl zwischen einer blauen Pille und einer roten Pille.
    Nimmst Du die blaue Pille, dann verwendest du ganz einfach newStack[i].Children.Add und machst weiter wie bisher. Was dabei heraus kommt funktioniert vielleicht sogar, aber Du machst es Dir wesentlich umständlicher, als es sein muss.
    Aber wenn Du die rote Pille nimmst, dann lernst Du, wie ErfinderDesRades in Post #4 bereits erwähnt hat, mit WPF richtig umzugehen. Das wird anfangs schwierig, weil WPF durchaus kompliziert ist. Aber sobald es in Deinem Kopf klickt schüttelst Du locker flockig den XAML-Code raus, der Dir für jedes Item in einer Liste einen Button in ein StackPanel packt.

    Welche Pille soll es sein?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Du darfst schon. Nur sollte man allgemein nicht, weil WPF auf eine andere Herangehensweise ausgelegt ist. (Post #15 bitte nicht übersehen.)
    Wenn Du uns kurz erklärst, was Du mit den Buttons eigentlich machst, können wir Dir vielleicht grob zeigen, wie das in WPF aussehen sollte.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    paq schrieb:

    Ich glaube nich, oder willst du mir sagen ich darf keinen WPF-StackPanel im Codebereich erstellen lassen und versuchen ihn später anzusprechen?
    Ja - genau das! :thumbsup:

    Wie gesagt (jetzt glaub zum 5. Mal): Sowas wäre abstruser Unfug, ähnlich wie mit einem Paddel Suppe zu löffeln.
    Also es ist technisch möglich, und auch nicht im eigentlichen Sinne verboten - nur empfehlenswert ists nicht, und wäre auch ein Bärendienst, dir dabei helfen zu wollen.

    Niko Ortner schrieb:

    paq schrieb:

    ja es ist WPF


    Also, Du hast jetzt die Wahl zwischen einer blauen Pille und einer roten Pille.
    Nimmst Du die blaue Pille, dann verwendest du ganz einfach newStack[i].Children.Add und machst weiter wie bisher. Was dabei heraus kommt funktioniert vielleicht sogar, aber Du machst es Dir wesentlich umständlicher, als es sein muss.
    Aber wenn Du die rote Pille nimmst, dann lernst Du, wie ErfinderDesRades in Post #4 bereits erwähnt hat, mit WPF richtig umzugehen. Das wird anfangs schwierig, weil WPF durchaus kompliziert ist. Aber sobald es in Deinem Kopf klickt schüttelst Du locker flockig den XAML-Code raus, der Dir für jedes Item in einer Liste einen Button in ein StackPanel packt.


    die blaue Funktioniert nicht. somit kommen wir zur roten ... was hat dies mit xaml zu tun wenn es sich in C# abspielt?

    paq schrieb:

    die blaue Funktioniert nicht

    Was heißt "funktioniert nicht"?
    Klassiker: Exceptions, und was sie uns sagen wollen

    paq schrieb:

    was hat dies mit xaml zu tun wenn es sich in C# abspielt

    Bei der roten Pille spielt es sich nicht mehr in C# ab, sondern (fast) nur noch in XAML.
    Aber wie gesagt: Um ein Beispiel zu zeigen, muss ich erst wissen, was Du mit den Buttons machst. Also was soll passieren, wenn Du auf einen dieser Buttons klickst?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils