Daten aus Textdatei in Combobox einlesen



  • hab aktuallisieren noch mal geändert...

    public void aktuallisieren(object sender, EventArgs e)
    {
    try
    {
    Form1 objekt1 = new Form1();
    comboBox1.Items.Clear();
    StreamReader datei2;
    datei2 = File.OpenText("Liste.txt");
    while (datei2.Peek() != -1)
    {
    objekt1.k = datei2.ReadLine();
    if (objekt1.k == "")
    k = "keine Liste vorhanden";
    comboBox1.Items.Add(objekt1.k);
    }
    datei2.Close();
    }
    catch(SystemException)
    {
    MessageBox.Show("Es ist keine Fächerliste vorhanden.");
    }
    }



  • code-tags



  • Du machst ein riesen durcheinander mit objekten.
    Die Klasse heisst Form1 und die wird (vermutlich schon irgendwo z.B. mit Application.Run(new Form()); ) instanziert.
    Es müssen keine weiteren Form1 Objekte mehr instaziert werden.
    Du möchtest ja das Form1 Objekt benutzen, welches gerade angezeigt wird.

    Ich habe deinen Code mal ein wenig abgeändert.
    Nur die gröbsten Überlegungsfehler.

    private void button1_Click(object sender, EventArgs e) 
    { 
       StreamWriter datei; 
       datei = File.AppendText("Liste.txt"); 
       datei.WriteLine(textBox1.Text); 
       datei.Close(); 
       MessageBox.Show("Fach gespeichert,"); 
       textBox1.Text = ""; 
    }
    
    private void button2_Click(object sender, EventArgs e) 
    {
       aktuallisieren();
    }
    
    public void aktuallisieren() 
    { 
       try 
       {
          comboBox1.Items.Clear(); 
          StreamReader datei2; 
          datei2 = File.OpenText("Liste.txt"); 
          while (datei2.Peek() != -1) 
          {
             string k = datei2.ReadLine(); 
             if (k == "")
             {
                k = "keine Liste vorhanden";
             }
             comboBox1.Items.Add(k); 
          } 
          datei2.Close(); 
       } 
       catch(SystemException) 
       { 
          MessageBox.Show("Es ist keine Fächerliste vorhanden."); 
       } 
    }
    


  • hehe die gröbsten überlegungsfehler 😃 .

    Also bei der Methode Button2_click hast du "aktualisieren" jetzt normal aufgerufen.. die Methode "Aktualisieren ist aber in einer aneren klasse..
    deshalb habe ich das so gemacht:

    Form1 objekt2 = new Form1();
    objekt2.aktuallisieren(objekt2, e);
    this.Close();

    ist das grundsätzlich richtig?
    und das this.close();
    muss das aufgerufene Formular schliessen, nachedem die Wörter in die txt-datei gespeichert wurden. Dann ist das Programm aber natürlich nicht völlig beendet, sonder einfach das 2. aufgerufene Form.

    und äh bei mir funzt dein code irgendwie auch nicht. Es gibt, wie bei mir keine Fehlermeldung und nichts, aber es aktuallisiert nach dem die Liste der Combobox nicht. Erst beim neustart werden die Wörter der txt-datei angezeigt.

    danke aber für die Antwort.



  • Zu welcher Klasse gehören button1_Click(..) und button2_Click(..) ?
    Simon



  • und äh bei mir funzt dein code irgendwie auch nicht. Es gibt, wie bei mir keine Fehlermeldung und nichts, aber es aktuallisiert nach dem die Liste der Combobox nicht. Erst beim neustart werden die Wörter der txt-datei angezeigt.

    Dann debugge doch mal button2_Click(..) bzw. aktualisieren()...



  • die buttons gehören zur klasse "Fächerliste"
    die Methode "Aktualisieren" zur "Form1"

    werde das debuggen mal versuchen...



  • Und welche Form ist die Hauptform (= steht bei Application.Run(new XXX());)?
    simon



  • die Form1 also die zuerst aufgerufen wird.
    auf der die combobox ist.

    auf der Fächerliste, werden nur die Wörter in die txt eingelesen.



  • Mach Form1 auf eine Art der Fächerliste bekannt.
    (Beim Konstruktor, als Setter, als Property)...

    Kannst auch folgendes versuchen:

    private void button2_Click(object sender, EventArgs e) 
    {
       Form1 form1 = (Form1) this.Controls["Form1"];
       form1.aktuallisieren();
    }
    

    Simon



  • das Programm sagt, für deine instanzierung brauche er das Schlüsselwort "new".



  • ja kann sein, dass das so nicht funktioniert.
    Dann die anderen möglichkeiten:

    Mach Form1 auf eine Art der Fächerliste bekannt.
    (Beim Konstruktor, als Setter, als Property)...

    Simon



  • Verstehe nur nicht wie ich das machen soll...

    Habe das Problem jetzt sowieso anders gelöst.
    Ich habe einfach in der Klasse Form1, in der die combobox ist einen zusätzlichen button, "neu laden" hinzugefügt.
    So kann man die Wörter jetzt mit der Methode Fächerliste einlesen, muss dann aber um die Combobox neu zuladen den Button "neu laden" drücken, der ja in der geleichen klasse wie die Box ist.

    Danke für deine Hilfe und schönen Tag noch

    mfg Root


Anmelden zum Antworten