Benutzer mit den meisten Antworten
Werte aus String Textfeldern zuordnen

Frage
-
Hallo Liebe Community,
ich habe ein Problem und zwar wollte ich gerne aus einem String werte lesen. Ich hab mir schon ein paar Foreneinträge durchgelesen und das Prinzip verstanden wie man einen string "splittet" bzw. bis zu einem Trennzeichen ausliest. Mein Verständnis kommt aus diesem Post von tutorials.de: https://www.tutorials.de/threads/c-dateiarbeit-lesen-und-wert-suchen.346154/
Die Besonderheit an dem Ganzen ist, dass der String nicht nur Zahlen, sondern auch Wörter beinhaltet. Hier ein Beispiel des Strings:Check(NAME1=WERT1,NAME2=WERT2,...)
zB. ist WERT1=Ja und WERT2=56.Ich möchte die Werte nach dem "=" zeichen für den gesamten String auslesen (sind so an die 80 Werte) und in einzelne Textboxen schreiben. "NAMEx" soll dabei ignoriert werden.
Mein Ansatz wäre die Werte in ein Array zu schreiben und dann mit Hilfe einer Schleife die Werte den Textboxen zuzuordnen. Da stellt sich bei mir die Fragem wie kann ich Textboxen in ein Array schreiben ohne 80 Textboxen (Textbox1-80.Text) händisch einzugeben?
Ich hoffe es hat nicht schonmal jemand so eine Frage gestellt und verschwende damit eure Zeit :P
Für jede Hilfe wäre ich dankbar.
Falls irgendwas unklar sein sollte versuche ich so gut wie möglich klarheit zu schaffen ;)
Viele Grüße
Benjamin
Antworten
-
Hallo Benjamin,
ich würde auch sagen dass du den String auf splitten- und danach alles in einer Schleife durchlaufen solltest:
var parts = myString.Split(','); for(int i=0;i<parts.Length;++i{ var value = parts[i].Split('=')[1]; textBoxes[i].Text = value; }
textBoxes ist dabei ein Array deiner TextBoxen:var textBoxes = new TextBox[]{ textBox1, textBox2, textBox3, textBox4, textBox5, ...};
Die Alternative wäre die Controlnamen anhand von i zu bestimmen und dann das Control zu suchen. Das setzt aber voraus das sich alle Controlnamen nur durch die Zahl unterscheiden. Auch wäre hier noch die Frage welche Technologie (WPF, WinForms, ...) du benutzt.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Sonntag, 4. Oktober 2015 14:27
- Als Antwort markiert Aleksander Chalabashiev Montag, 5. Oktober 2015 08:19
-
Hallo Benjamin,
unter WinForms kannst du die Find-Methode auf der Controls-Auflistung aufrufen:
var textBox = this.Controls.Find("textBox" + i, true)[0] as TextBox; textBox.Text = "Dieser Text landet in TextBox Nummer " + i;
Dieser Methode musst du einfach nur den Namen des gesuchten Controls übergeben, also Beispielsweise "textBox1". Dir wird dann ein Array mit möglichen Ergebnissen zurück geliefert wovon du dann dein Control heraus suchen musst. I.d.R. ist es das erste. Nach einem Cast in den richtigen Typ kannst du die Variable wie eine normale TextBox nutzen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Sonntag, 4. Oktober 2015 14:27
- Als Antwort markiert Aleksander Chalabashiev Montag, 5. Oktober 2015 08:19
-
Hallo,
du benennst die Controls über die Name-Eigenschaft, was man sowieso immer tun sollte. Und über diesen Namen lassen sich dann auch die Controls wieder ansprechen.
In meiner Lösung gibt es lediglich ein Array mit Strings der Form "Name=Wert". Diese werden dann in der Schleife aufgeteilt und nur der Wert wird weiter verwendet. Ein Array nur für die Werte gibt es nicht. Beim durchlaufen der Schleife hast du immer die Variable i die den Index des aktuellen Elements markiert. In das Control mit dem entsprechenden Nummern wird dann der Wert geschrieben. Das Element mit der passenden Nummer ist entweder das i-te Element im Array oder aber das Element mit dem Namen "TextBox"+i - das hängt davon ab ob du die Array- oder die Controls.Find-Lösung nutzt.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen BLDL Sonntag, 4. Oktober 2015 15:36
- Als Antwort markiert Aleksander Chalabashiev Montag, 5. Oktober 2015 08:19
Alle Antworten
-
Hallo Benjamin,
ich würde auch sagen dass du den String auf splitten- und danach alles in einer Schleife durchlaufen solltest:
var parts = myString.Split(','); for(int i=0;i<parts.Length;++i{ var value = parts[i].Split('=')[1]; textBoxes[i].Text = value; }
textBoxes ist dabei ein Array deiner TextBoxen:var textBoxes = new TextBox[]{ textBox1, textBox2, textBox3, textBox4, textBox5, ...};
Die Alternative wäre die Controlnamen anhand von i zu bestimmen und dann das Control zu suchen. Das setzt aber voraus das sich alle Controlnamen nur durch die Zahl unterscheiden. Auch wäre hier noch die Frage welche Technologie (WPF, WinForms, ...) du benutzt.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Sonntag, 4. Oktober 2015 14:27
- Als Antwort markiert Aleksander Chalabashiev Montag, 5. Oktober 2015 08:19
-
Hallo Benjamin,
unter WinForms kannst du die Find-Methode auf der Controls-Auflistung aufrufen:
var textBox = this.Controls.Find("textBox" + i, true)[0] as TextBox; textBox.Text = "Dieser Text landet in TextBox Nummer " + i;
Dieser Methode musst du einfach nur den Namen des gesuchten Controls übergeben, also Beispielsweise "textBox1". Dir wird dann ein Array mit möglichen Ergebnissen zurück geliefert wovon du dann dein Control heraus suchen musst. I.d.R. ist es das erste. Nach einem Cast in den richtigen Typ kannst du die Variable wie eine normale TextBox nutzen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Sonntag, 4. Oktober 2015 14:27
- Als Antwort markiert Aleksander Chalabashiev Montag, 5. Oktober 2015 08:19
-
Hallo Tom,
das heißt also ich kann die Textboxen "labeln" und suche mir mit der obigen Methode die anzusprechenden Textboxen heraus?
Wie kann ich mir das Array mit den möglichen Ergebnissen anzeigen lassen und das passende auswählen? Kann ich die obige Methode auch für eine Schleife verwenden bzw. ein Array mit allen Textboxen erstellen die er findet und dann später mit der Laufvariable i in textBoxes[i].Text verwenden?
Sorry für die vielen aneinandergereihten Fragen ;)
-
Hallo,
du benennst die Controls über die Name-Eigenschaft, was man sowieso immer tun sollte. Und über diesen Namen lassen sich dann auch die Controls wieder ansprechen.
In meiner Lösung gibt es lediglich ein Array mit Strings der Form "Name=Wert". Diese werden dann in der Schleife aufgeteilt und nur der Wert wird weiter verwendet. Ein Array nur für die Werte gibt es nicht. Beim durchlaufen der Schleife hast du immer die Variable i die den Index des aktuellen Elements markiert. In das Control mit dem entsprechenden Nummern wird dann der Wert geschrieben. Das Element mit der passenden Nummer ist entweder das i-te Element im Array oder aber das Element mit dem Namen "TextBox"+i - das hängt davon ab ob du die Array- oder die Controls.Find-Lösung nutzt.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen BLDL Sonntag, 4. Oktober 2015 15:36
- Als Antwort markiert Aleksander Chalabashiev Montag, 5. Oktober 2015 08:19