Hey Leute,
ich schreibe gerade eine kleine Anwendung (Windows - Form) bei der man die Möglichkeit hat einen Text in eine Textbox einzugeben und per Button-klick in eine Liste-Box eintragen zu lassen.
Gleichzeitig wird ein Text-Dokument erstellt. In dieses Dokument wird nun der List-Box-Text eingetragen.
Funktioniert auch **fast **alles!
Mein Problem:
Ich überschreibe logischerweiße immer wieder meinen Ausgaben-String.
Wie schaffe ich es dass der String nicht überschrieben sondern erweitert wird?
(Ja ich weiß, der Code könnte besser geschrieben sein 😄 Aber ich bin ja noch Anfänger!. Tipps nehme ich gerne an)
string eingabe = txtEingabe.Text;
string textFeld = eingabe;
int zähler = 1;
lstbx.Items.Add(eingabe);
txtEingabe.Text = "";
string lkjlk = lstbx.Text;
while (zähler < Convert.ToInt32((lstbx.Items.Count.ToString())))
{
zähler++;
}
string anzahl = lstbx.Items[zähler-1].ToString();
System.IO.File.WriteAllText(@"C:\Users\Carnifex\Pictures\WriteText.txt", anzahl);
Was genau meinst du bei deinem Code mit Ausgaben-String?
Bei einem internen String kannst du einfach mit += Text anfügen und bei einer Textdatei müßtest du File.AppendText benutzen.
Dein Code ist außerdem äußerst umständlich (besonders die zähler-Ermittlung)...
@Th69
Mit Dem "Ausgabe-String" meine Ich den String "anzahl". In diesem String ist mein Text gespeichert der in die Datei geschrieben werden soll.
Und mein Problem ist halt jetzt dass ich die Textdatei immer überschreibe anstatt sie zu ergänzen.
Beispiel: Wenn mein String im ersten Durchlauf "aaa" heißt, wird in dem Textdokument "aaa" geschrieben.
Wenn mein String im zweiten Durchlauf "bbb" heißt, wird in dem Textdokument "bbb" geschrieben und somit "aaa" ersetzt.
Was ich will: Das "aaa" in dem Textdokument steht und eine Zeile darunter "bbb".
Hallo CarnifeX,
das hat dir Th69 eigentlich schon beantwortet ... .
So wie dein Code aktuell ist, wird ja die Methode bei jedem Button-Click neu aufgerufen. D.h. die Variable ist erstmal leer und wird dann mit dem Listbox-Element beschrieben.
Du kannst es so machen, wie Th69 es gesagt hat oder die Variable als Klassen-Feld (privat!) definieren.
Zum Code:
while (zähler < Convert.ToInt32((lstbx.Items.Count.ToString())))
{
zähler++;
}
was soll das?!
Wenn ich jezt nix übersehen habe, dann könntest du dafür auch
zähler = lstbx.Items.Count - 1;
schreiben. Das spart ungemein an Rechenleistung und sinnlos vertaner Zeit.
Ich glaube dir fehlen hier gerade die grundlegendten Grundlagen.
Wie Th59 schon gesagt hat musst du deinen string mit "+="
also
anzahl += "jhk";
Dein Problem sollte noch sein, dass du die Variable jedes mal neu erstellst.
Wieso zählst du einen Zähler hoch, wenn du die Anzahl doch mit "lstbx.Items.Count" ermitteln kannst?
Und wieso konvertiert du eine Zahl, die dir Count zurück gibt in einen String um den String in eine Zahl zu wandeln?
@Th69 Danke für den Tipp!
@Ezio Danke auf für deinen Tipp 😃
@Alle Es funktioniert jezt mit dem unten stehenden Code:
string eingabe = txtEingabe.Text;
int zähler = 1;
lstbx.Items.Add(eingabe);
txtEingabe.Text = "";
string lkjlk = lstbx.Text;
zähler = lstbx.Items.Count - 1;
string Ausgabe = lstbx.Items[zähler].ToString();
string path = @"C:\Users\Carnifex\Pictures\WriteText.txt";
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(Ausgabe);
}
Hallo CarnifeX,
ein Problem sehe ich noch: Hast du schon mal das File "WriteText.txt" per Hand gelöscht und dann dein Programm gestartet?
Ich gebe dir mal nen Tipp, was passiert -> Kabumm 😁
Das gleiche passiert, wenn du das File zur Laufzeit löschst.
Sorry Doku falsch in Erinnerung gehabt ... .
Hi Ezio,
meinst du, weil dann die Datei beim AppendText nicht existiert?
Kein Problem:
Erstellt StreamWriter, die UTF-8 codierten Text zu einer vorhandenen Datei angefügt, oder einer neuen Datei, wenn die angegebene Datei nicht vorhanden ist.