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
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).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
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).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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