C# Alle werte einer Combobox in eine Textdatei schreiben

matte

Cadet 2nd Year
Registriert
Feb. 2014
Beiträge
27
Hallo liebe Forumgemeinde!!!

würde Hilfe benötigen.

Ich möchte in meinem Programm Werte aus einer Textdatei in eine Combobox lesen und und schreiben.
Funktioniert eigentlich... nur beim schreiben weiß ich nicht wie ich alle inhalte der combobox in die Textdatei bekomme.

Hier mein Code:

Code:
namespace xxxxx

{
    public partial class Hauptform : Form
    {
        public Hauptform()
        {
            InitializeComponent();
            String Zeile;
            using (StreamReader ElementeAuslesen = new StreamReader (@"C:\Users\Public\Documents\Elemente.txt"))
                while ((Zeile = ElementeAuslesen.ReadLine()) != null)
            {
                _cbxMonatAusw.Items.Add(Zeile);
            }
            
        }

        private void _cbNeuerMonat_Click(object sender, EventArgs e)
        {
            if (_txtNeuerMonat.Text == "")
                MessageBox.Show("Keinen Monat eingegeben", "",MessageBoxButtons.OK);
            //Neuen Monat zur combobox hinzufügen
            String NeuesElement = _txtNeuerMonat.Text;
            _cbxMonatAusw.Items.Add(NeuesElement);

            FileStream fs = new FileStream(@"C:\Users\Public\Documents\Elemente.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            
            sw.WriteLine(:evillol:);
            sw.Close();

            //Textfeld wieder löschen
            _txtNeuerMonat.Text = "";


        }

        private void _cbMonatLoeschen_Click(object sender, EventArgs e)
        {
            String LoeschElement = _cbxMonatAusw.Text;
            MessageBox.Show(LoeschElement);
        }

    }
}
 
Zuletzt bearbeitet:
Bitte verwende den [code]-Tag! So ist es nahezu unleserlich.
 
Willkommen im Forum

Pack das ganze mal in Codeklammern

HTML:
[CODE] Den Code hier [/CODE]

dann blick man mehr durch
 
Eigentlich geht es doch so :), wenn du aber wirklich alle neu in die Datei schreiben möchtest:

Beim StreamWriter den überschriebenen Konstruktor verwenden um bereits enthaltenes zu überschreiben
=> mit einer Schleife (z.B. foreach) alle "ComboBox.Items" durchgehen => Zeile schreiben => Stream schließen :).

Viel Erfolg
 
So habe ich nun geändert - danke für den Hinweis.

naja würde eigentlich nur gerne den neuesten eintrag dazu hängen.
Jedoch überschreibt er mir immer alles in der Textdatei.

Wollte es davor so machen:
Code:
            FileStream fs = new FileStream(@"C:\Users\Public\Documents\Elemente.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            
            sw.WriteLine(_txtNeuerMonat.Text);
            sw.Close();
 
Einfach den überschribenen Konstruktor verwenden vom StreamWriter verwenden :). Schau dir beim Link den 4ten Konstruktor an.

#EDIT: Für die Zukunft, wenn du genau weißt wonach du suchen musst, solltest du nicht auf MSDN verzichten ;): Konstruktoren

#EDIT2: Kein Problem wir helfen alle gerne. Solange man nicht wartet bis eine durchgekaute Lösung erscheint und sein Köpfchen einschaltet.
 
Zuletzt bearbeitet:
Ist nur mehr eine kleine Änderung zu deinem Code.
Mit Foreach drüberschleifen -> Zeile einzeln schreiben -> Abschließen

Code:
foreach (string jotta in _cbxMonatAusw.Items)
{
    sw.WriteLine(jotta);
}
sw.Close();

€: Viel zu langsam :D
Dann musst du die bereits geschriebenen Daten einlesen und abgleichen - sonst wird es nicht mit anhängen ohne Überschreiben. Musst dich aber fragen ob das bei sowas einfachem nicht anders zu lösen wäre.
 
Zuletzt bearbeitet: (War zu langsam)
PapstRatze schrieb:
Einfach den überschribenen Konstruktor verwenden vom StreamWriter verwenden :). Schau dir beim Link den 4ten Konstruktor an.

:watt: bin eher neu auf dem Gebiet.
Ergänzung ()

@Latex :daumen:
Super funktioniert einwandfrei!!!

DANKE an alle für die schnelle Hilfe!
Ergänzung ()

LATEX schrieb:
Ist nur mehr eine kleine Änderung zu deinem Code.
Mit Foreach drüberschleifen -> Zeile einzeln schreiben -> Abschließen

Code:
foreach (string jotta in _cbxMonatAusw.Items)
{
    sw.WriteLine(jotta);
}
sw.Close();

€: Viel zu langsam :D
Dann musst du die bereits geschriebenen Daten einlesen und abgleichen - sonst wird es nicht mit anhängen ohne Überschreiben. Musst dich aber fragen ob das bei sowas einfachem nicht anders zu lösen wäre.

Aha....?!? Also sollte ich mir dich mal die Konstruktoren ansehen..
 
Schreib nochmal was genau am momentanen Verhalten stört bitte. Habe gemerkt man kann "naja würde eigentlich nur gerne den neuesten eintrag dazu hängen" auch anders verstehen als ich.

Also ja deine wohl gewünschte Lösung erreichst mit Lösung 4 vom Link von PapstRatze.
 
Habe mir das von PapstRatze durchgelesen und jetzt so geschrieben:

Code:
            using (StreamWriter sw = new StreamWriter(@"C:\Users\Public\Documents\Elemente.txt", true))
            {
                sw.Write(_txtNeuerMonat.Text);
            }

Dachte ich muss die Combobox durchgehen deshalb meine "komische" Fragenstellung.

DANKE mit so einer schnellen Hilfe habe ich nicht gerechnet!
Ergänzung ()

Ok funtkioniert noch nicht ganz.

Er schreibt es mir immer in die gleiche Zeile direkt daran und nicht darunter :(
 
Dann nimm entweder ein WriteLine oder füge noch manuell einen Zeilenumbruch hinzu.
 
Danke :)
Manchmal kommt man sich echt dumm vor so einfach ist die Lösung.
 
Mal im Ernst, solche Fragen kann man binnen Minuten auch mit Hilfe einer Handelsüblichen Suchmaschine und/oder der .NET-Doku beantworten. Dabei würdest du deutlich mehr lernen als wenn dir hier die passende Lösung präsentiert wird.
 
Als Anfänger ist es auch manchmal sehr schwer das Richtige zu suchen.

Wie du bei meinem Code siehst habe ich doch einiges ohne Hilfe geschrieben.
Auch das mit den Konstruktoren habe ich dann selbst gelesen. Mir fehlte nur der richtige Hinweis.

Sehe hier nicht das mir jemand alles fertig geschrieben hat.

Trotzdem DANKE!
 
Vor dem schliessen des Streams (Close), bitte noch ein "Flush" aufrufen.
Nicht das Du dich bei größeren Daten wunderst warum nicht alles in deine Datei geschrieben wurde...
 
Laut Doku werden bei der Close()-Methode alle noch gepufferten Daten geschrieben, sodass es nicht zum Datenverlust kommt. Flush() ist also kurz vorm Schließen nicht notwendig.
You must call Close to ensure that all data is correctly written out to the underlying stream.
 
Wow echt tolles Forum hier - ich danke euch für die tollen Infos!
 
Zurück
Oben