Laden...

Text aus Listbox auslesen -> in Text Dokument

Erstellt von CarnifeX vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.395 Views
C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren
Text aus Listbox auslesen -> in Text Dokument

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);
4.942 Beiträge seit 2008
vor 8 Jahren

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)...

C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

@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".

189 Beiträge seit 2014
vor 8 Jahren

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.

K
89 Beiträge seit 2013
vor 8 Jahren

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?

C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

@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);
            }  

189 Beiträge seit 2014
vor 8 Jahren

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 ... .

771 Beiträge seit 2009
vor 8 Jahren

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.