Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Objektname als Variable
NameInvalid
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Objektname als Variable

beantworten | zitieren | melden

Hallo zusammen,

ich stehe vor einem Problem wofür ich einen kleinen Denkanstoß bräuchte. Mein untenstehender Code soll eine gelesene Zeile mit ".split()" zerlegen und in einem Array ablegen, soweit so klar. Das Array soll dann in "Labels" in einem WPF Window ausgegeben werden, woran ich aktuell leider scheitere.

Mein Problem liegt darin, beim durchlaufen der Schleife auf das "nächste" Objekt zu springen und auf dies zu verweisen. Mir fehlt einfach der Ansatz wie ich so etwas lösen könnte.


            string InputLine = "1 2 3 4";

            string[] subs = InputLine.Split(' ');

            //lbl_1.Content = subs[0];
            //lbl_2.Content = subs[1];
            //lbl_3.Content = subs[2];
            //lbl_4.Content = subs[3];
            //lbl_5.Content = subs[4];
            //lbl_6.Content = subs[5];
            //lbl_7.Content = subs[6];
            //lbl_8.Content = subs[7];
            //lbl_9.Content = subs[8];
            //lbl_10.Content = subs[9];

            foreach (string sub in subs)
            {
                lbl_1.Content = sub; // "lbl_1" muss variabel sein, bzw. sich "hochzaehlen" lassen
            }

Danke schonmal für die Mühe
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.183

beantworten | zitieren | melden

So funktionieren leider nur untypisierte Scriptsprachen (JavaScript, PHP, TCL...), aber nicht Sprachen bzw. Runtimes wie .NET.
Erklärung und Lösung hier:
[FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls

Fazit: Du musst Dir die Instanzen (bei Dir Labels) merken (zB in einem Array).
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.800
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Wenn Du die Labels im Code anlegst nach Bedarf dann kannst Du sie als Array anlegen und über Index ansprechen :


Label[] lbl = new Label[100];
...
lbl[i].Content = subs[i];

Wenn Du sie per Hand angelegt hast dann kannst Du nicht per Index ansprechen, aber andersrum geht es :


foreach (var child in ...Children)
    for(int i = 0; i < 100; i++)
    {
         if (child.Name = "lbl_"+ i.Tostring()) child.Content = subs[i];
    }

Wäre nicht eine Tabelle oder Grid besser für die Darstellung vieler Zahlen ?

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.183

beantworten | zitieren | melden

Der Missbrauch des Name-Tags ist auch einer der größten Übel in der WinForms Welt.
Man kann genauso auf den Index zugreifen, man muss halt das Array manuell erstellen (zB im Konstruktor).
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.800
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden


Ja, dafür ist der Name-Tag nicht gedacht gewesen.

Wir kennen zuwenig Anforderungen des Thread Erstellers um mehr Tipps geben zu können.

Ist es eine variable Anzahl ? Oder eine feste Anzahl ? Größer 10 ?

In WPF ist eine Liste mit Labels und Data Binding auf jeden Fall die bessere Lösung :

            <ListView x:Name="lvi_devices" ItemTapped="Listview_ItemTapped" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <ListView.Header>
                    <Grid ColumnDefinitions="1*" HorizontalOptions="FillAndExpand">
                        <Label Text="Name" FontSize="13" Grid.Column="0"></Label>
                    </Grid>
                </ListView.Header>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid ColumnDefinitions="1*" HorizontalOptions="FillAndExpand">
                                <Label Text="{Binding name}" FontSize="17" Grid.Column="0"></Label>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers