Hallo,
ich habe folgendes Problem: Und zwar habe ich eine Textdatei mit 5 Zeilen, diese Zeilen möchte ich in 5 separaten Labels anzeigen, also lese ich erstmal die Textdatei zeilenweise aus und schreibe sie in eine ArrayList. Das klappt "anscheinend" schon mal gut, da mir Count von meiner ArrayList den Wert 4 zurückliefert.
Nur wie bekomme ich den Text/Werte von der ArrayList jetzt in die einzelnen Labels? Ich hab folgendes versucht, das klappt aber nicht:
for (int i =0; i <= arrText.Count; i++)
{
if(i==0){label1.text = arrText.IndexOf(0);}
...
}
Was mache ich falsch? Es wird im Label nur immer "-1" angezeigt...
Hallo Vril,
Label[] labels = new Label[]{this.label1,this.label2,this.label3,this.label4,this.label5};
for(int i = 0 ; i < labels.Length ; i++)
{
if(zeilenListe.Count>i)
{
labels[i].Text = zeilenListe[i];
}
}
Gruß
Juy Juka
Hallo Vril,
Das klappt "anscheinend" schon mal gut, da mir Count von meiner ArrayList den Wert 4 zurückliefert.
Nein, nicht gut. Wenn du fünf Zeilen hast, dann müsste Count auch fünf liefern.
Beachte bitte außerdem: ArrayList gehört in die Mottenkiste und sollte wie alle untypsierten Collections aus System.Collections nicht mehr benutzt weden. Verwende stattdessen List<T> und alle anderen typsierten Collections aus System.Collections.Generic.
Beachte bitte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
herbivore
Ok, vielen Dank schon mal für die Tipps!
Das mit der Mottenkiste hab ich wohl irgendwie etwas verdrängt! Sorry!
Bzgl. Count, ich dachte das passt so, weil ich davon ausgegangen bin die Zählung beginnt bei 0, also 0-1-2-3-4. Mittlerweile hab ich aber festgestellt das ich noch einen ganz anderen Bock in meinem Code habe, nur finde ich ihn nicht!
Das Problem ist aus der Textdatei wird nicht jede Zeile gelesen, sondern nur die 3. und die 5. bzw. die 1. Zeile wird eigentlich immer ignoriert. Hab schon überprüft, nach jeden Wert habe ich aber einen Zeilenumbruch. Zum einlesen gehe ich so vor:
string strFile = @"txt\EnergieWerte.txt";
if (File.Exists(@strFile))
{
StreamReader sr = new StreamReader(@strFile, Encoding.Default);
while ((s = sr.ReadLine()) != null){
//mach was
}
}
Hab die Textdatei ins Projekt eingefügt, "Immer kopieren" und "Inhalt" gesetzt. Aber die 1. Zeile wird nie eingelesen.
Macht es eigentlich Sinn wenn ich mir die while-Schleife spare und sowas mache:
label1.text = sr.ReadLine();
label2.text = sr.ReadLine();
...
Ok, keine elegante Lösung, aber ich weis ja das in der Textdatei dann nur 5 Zeilen stehen, so könnte ich mir halt die Liste komplett sparen und bräuchte auch keine Schleifen zum füllen bzw. leeren?
Hallo Vril,
Macht es eigentlich Sinn wenn ich mir die while-Schleife spare und sowas mache:
Nö, das würde ich dir nicht empfehlen, denn was passiert wenn du mal um einen Eintrag mehr brauchst. => Du musst das ganze Programm anpassen und da schleichen sich dann oft irgendwelche Fehler ein.
Hier gibt es ein schöner Tutorial: [Tutorial] Alles über Dateien 2.2
Guck dir das mal an, dann findest du den Fehler sicher.
Weiters interessiert es mich, was du mit den 5 Labels machst.
Was möchtest du da anzeigen? Ist da evtl. ein anderes Control wie die ListBox, DataGridView oder ähnliches besser dafür geeignet.
Gruss
Michael
Also in den 5 Labels weden einfach Werte angezeigt, als Beispiel z.B. Name, Vorname usw. Der Anwender hat dann aber die Mögllichkeit diese Werte über einen separaten Dialog zu ändern. In diesem wird dann angezeigt "Aktueller Wert" und daneben ein entsprechendes TextField mit der Überschrift "Neuer Wert"!
Hallo,
könnte es sein, dass Du ReadLine doppelt aufrufst, etwa so:
StreamReader sr = new StreamReader(@strFile, Encoding.Default);
while ((s = sr.ReadLine()) != null){
label1.Text = sr.ReadLine();
}
Das würde einen solchen Fehler erklären. Richtig wäre es so:
while ((s = sr.ReadLine()) != null){
label1.Text = s;
}
Außerdem empfehle ich sowieso, eine solche Datei kürzer einzulesen mit:
string[] content = File.ReadAllLines(strFile, Encoding.Default);
Damit sind alle Zeilen sofort vorhanden.
Was soll übrigens das @ vor "strFile"?
Jürgen
Stimmt!!!! ReadLine() war somit doppelt! Danke!!
Das @ bezweckt das er mir den Pfad nimmt, also '' akzeptiert. Lasse ich das @ weg, dann findet er "txt\meinText.txt" nicht!
Das @ bezweckt das er mir den Pfad nimmt, also '' akzeptiert. Lasse ich das @ weg, dann findet er "txt\meinText.txt" nicht!
Hierfür gilt das natürlich, nämlich vor der String-Konstanten:
string strFile = @"txt\EnergieWerte.txt";
Aber hier, nämlich vor dem Namen der Variablen, halte ich es für Quatsch:
if (File.Exists(@strFile))
Gruß Jürgen
Danke, tscherno, für die Bestätigung meines Vorschlags:
Außerdem empfehle ich sowieso, eine solche Datei kürzer einzulesen mit:
string[] content = File.ReadAllLines(strFile, Encoding.Default);
Damit sind alle Zeilen sofort vorhanden.
Jürgen
Hallo jetho,
Danke, tscherno, für die Bestätigung meines Vorschlags
Das muss ich wohl gestern zu später Stunde überlesen haben...
Gruss
tscherno