Entwickler-Ecke
Basistechnologien - StreamReader Problem beim Einlesen von .txt [Anfänger]
LucaAnwander - Mi 19.01.11 19:08
Titel: StreamReader Problem beim Einlesen von .txt [Anfänger]
Hi,
Ich habe ein Problem beim einlesen .txt Dateien.
Ich möchte mir einen kleiner Serial speicher bauen,
zum schreiben von der Serial.txt habe ich folgenden Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| try { if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "") { textBox1.Clear(); textBox2.Clear(); textBox3.Clear(); MessageBox.Show("Error 2"); } else { StreamWriter writer = new StreamWriter("Serials.txt", true, System.Text.Encoding.Default); writer.WriteLine(string.Concat(textBox3.Text, "|", textBox1.Text, "|", textBox2.Text)); writer.Close(); textBox1.Clear(); textBox2.Clear(); textBox3.Clear(); MessageBox.Show("Save successfully"); } } catch { MessageBox.Show("Error 1"); } |
Zum Einlesen von der .txt habe ich diesen code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| ist<FooBar> list = new List<FooBar>(); StreamReader reader = new StreamReader("Serials.txt"); while (reader.EndOfStream == false) { FooBar fooBar = new FooBar(); fooBar.Load(reader.ReadLine()); list.Add(fooBar);
} reader.Close(); comboBox1.Items.AddRange(list.ToArray()); |
Die Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| class FooBar { string m_ProgramName; string m_emailAdresse; string m_serienNummer;
public FooBar() { } public override string ToString() { return this.m_ProgramName; }
public void Load(string reader) { string[] werte = reader.Split('|'); m_ProgramName = werte[0]; m_emailAdresse = werte[1]; m_serienNummer = werte[2]; } } |
Jetzt werden immer die ersten einträge in der ComboBox angezeigt d.h der Name des Programms.... Wie schaffe ich es jetzt Die E-Mail + Serial in den beiden Textboxen anzuzeigen?
Mfg
Luca
Th69 - Do 20.01.11 15:31
Hallo,
du hast ja auch die FooBar.ToString()-Methode so überschrieben, daß es den Programmnamen zurückgibt (und diese Methode verwendet die List- bzw. Combobox zum Anzeigen).
Alternativ kannst du natürlich auch die Listeneinträge selber festlegen:
C#-Quelltext
1: 2:
| foreach(FooBar foobar in list) comboBox1.Items.Add(foobar.EMail + " " + foobar.SerialNumber); |
EMail und SerialNumber sollten dann Eigenschaften (Properties) der Klasse FooBar sein (bisher hast du ja von extern keine Möglichkeit auf diese Daten zuzugreifen, da du ja bisher nur private Membervariablen hast).
LucaAnwander - Do 20.01.11 17:33
Hi,
Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| List<FooBar> list = new List<FooBar>(); StreamReader reader = new StreamReader("Serials.txt"); while (reader.EndOfStream == false) { FooBar fooBar = new FooBar(); fooBar.Load(reader.ReadLine()); list.Add(fooBar);
} reader.Close(); foreach (FooBar foobar in list) comboBox1.Items.Add(foobar.m_ProgramName); |
Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public string m_ProgramName; public string m_emailAdresse; public string m_serienNummer;
public FooBar() { } public override string ToString() { return this.m_ProgramName; }
public void Load(string reader) { string[] werte = reader.Split('|'); m_ProgramName = werte[0]; m_emailAdresse = werte[1]; m_serienNummer = werte[2]; } |
In der ComboBox1 wird nun der Name des Programms angezeigt, so wie es sein soll =)
jetzt bekomme ich es nur nicht hin die mail + serial an das ausgewählte Item zu hängen.
Das wenn ich z.B Office 2010 in der Combobox steht in den beiden textoxen Name und Serial stehen ?
Hat einer noch einen Tipp auf Lager?
Mfg
Luca
Th69 - Do 20.01.11 17:57
Sorry, da hatte ich dich wohl falsch verstanden (bzw. verlesen ;-)) ... du willst bei Auswahl eines ComboBox-Eintrags die zugehörige EMail und Seriennummer dann in den Textboxen angezeigt haben.
Die erste Änderung, wie schon von mir beschrieben, ist das Erzeugen der Eigenschaften (besser als öffentliche Felder (public fields)!!!):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public string EMaiL { get { return m_emailAdresse; } }
public string SerialNumber { get { return m_serienNummer; } } |
Kürzer geht es auch übrigens auch so:
C#-Quelltext
1: 2:
| public string EMail { get; private set; } public string SerialNumber { get; private set; } |
(nun brauchst du die privaten Member nicht mehr, da der Compiler diese automatisch erzeugt)
Dann mußt du für die ComboBox das "SelectedIndexChanged"-Ereignis abonnieren und folgendermaßen implementieren:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { FooBar foobar = comboBox1.SelectedItem as FooBar; if (foobar != null) { textBox1.Text = foobar.EMail; textBox2.Text = foobar.SerialNumber; } } |
P.S. "abonnieren" ist der offizielle Ausdruck für das Erzeugen einer Methode für ein bestimmtes Ereignis, d.h. entweder im Code direkt mittels '+=' oder aber im VS für das gerade selektierte Steuerelement unter 'Ereignisse' einen Doppelklick ausführen.
LucaAnwander - Do 20.01.11 22:32
Hi,
So erstmal die Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| public string m_ProgramName; string m_emailAdresse; string m_serienNummer;
public FooBar() { } public override string ToString() { return this.m_ProgramName; }
public void Load(string reader) { string[] werte = reader.Split('|'); m_ProgramName = werte[0]; m_emailAdresse = werte[1]; m_serienNummer = werte[2]; } public string EMail { get; private set; } public string SerialNumber { get; private set; } |
Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| List<FooBar> list = new List<FooBar>(); StreamReader reader = new StreamReader("Serials.txt"); while (reader.EndOfStream == false) { FooBar fooBar = new FooBar(); fooBar.Load(reader.ReadLine()); list.Add(fooBar); } reader.Close(); foreach (FooBar foobar in list) comboBox1.Items.Add(foobar.m_ProgramName); |
Meine Frage ist jetzt wo schreibe ich den Code hin ?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { FooBar foobar = comboBox1.SelectedItem as FooBar; if (foobar != null) { textBox1.Text = foobar.EMail; textBox2.Text = foobar.SerialNumber; } } |
Sorry das ich so einfaches zeug nicht hinbekomme.... Ich bin auch am verzweifeln..
Mfg
Luca
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!