C# RichTextBox in Form1 ändern, wenn Form2 geschlossen

Atreju93

Lieutenant
Registriert
Nov. 2010
Beiträge
596
Hallo zusammen

Ich bin nun schon den halben Tag an folgendem Problem:

Ich habe eine FormMain, bei welcher ich mittels eines Buttons eine zweite Form öffnen kann (FormWizzard). Dort kann ich verschiedene Dinge einstellen, welches dann in eine vorher mit starten von FormMain erstellte Datei geschrieben wird.

Jetzt wird aber in FormMain der Inhalt der Datei bereits angezeigt, wenn wenn mann FormMain startet. Wenn ich jetzt FormWizzard öffne, Änderungen vornehme und wider schliesse, ist in FormMain der Inhalt der RichTextbox (welche die Datei anzeigt) ja immer noch unverändert. Ich müsste also irgendwie, sobald FormWizzard geschlossen wird, in FormMain die RichTextBox aktualisieren. Doch wie kriege ich dies gebacken?

Von FormWizzard darf ich (laut Google) nicht auf die RichTextBox von FormMain direkt zugreifen und ändern.

Wenn ich in FormMain: "while FormWizzard.Visible" oder ähnliches mache, sperrt es mir die FormWizzard natürlich, kann nicht darauf zugreiffen.

Einen Timer ist auch sehr unelegant.

Wisst ihr eine Lösung?

Hier mal der Code, wie ich mittels Buttonklick die FormWizzard öffne:

Code:
        private void button_wizzard_Click(object sender, EventArgs e)
        {
            Erstellungsassistent.FilesourceForward = this.FilesourceForward;
            Erstellungsassistent.Show();
        }
 
Erstelle in der Mainform einen Handler für das Ereignis Erstellungsassistent.Closing, damit kannst du den Inhalt der Textbox dann refreshen.
 
Zuletzt bearbeitet: (Name geändert von der Red.)
OK, danke für den Hinweis :)

Nun da ich aber noch ziemlich neu auf C# bin, verwirren mich die Angaben auf Google bezüglich einem Handler sehr.. :S

Kann mir jemand ein Beispiel machen, wie ich einen Handler bezüglich den Closing event mache?
 
Ich mach das mal ausm Kopf, eventuelle Fehler wirst du schon rauskriegen :)
Hab jetzt mal das FormClosing Event von einer Form genommen.
Bei dem Wizzard gibts sicher auch sowas ähnliches.

Code:
        private void button_wizzard_Click(object sender, EventArgs e)         {  
            Erstellungsassistent.FilesourceForward = this.FilesourceForward;
            Erstellungsassistent.FormClosing += new FormClosingEventHandler(Erstellungsassistent_FormClosing);
            Erstellungsassistent.Show();         
        }

        void Erstellungsassistent_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.richtextfield1.update(); //Beispiel
        }
}
 
Also ich habe nun versucht dies zu implementieren. Der Debugger gibt mir zwar keinen Fehler aus, aber er kommt irgendwie nie in das FormClosing event hinein...

Habe hier mal den Code von FormMain bezüglich dem Button, welcher die FormWizzard startet:

Code:
        private void button_wizzard_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Filesource);
            if (Filesource == null)
            {
                FolderBrowserDialog FldBrs = new FolderBrowserDialog();
                if (FldBrs.ShowDialog() == DialogResult.OK)
                {
                    FilesourceForward = FldBrs.SelectedPath + "\\dummy.htm"; //Dummydatei anlegen, um exceptions zu vermeiden
                    HtmFile = File.CreateText(FilesourceForward);                  //Inhalt von RichTextBox in datei schreiben
                    HtmFile.Write(richTextBox_Fileview.Text);
                    HtmFile.Close();
                    MessageBox.Show(FilesourceForward);

                    Erstellungsassistent.FilesourceForward = this.FilesourceForward;
                    Erstellungsassistent.FormClosing += new FormClosingEventHandler(Erstellungsassistent_FormClosing);
                    Erstellungsassistent.Show();

                }

            }
            else
            {
                MessageBox.Show("filesource nicht leer oder anderer fehler");
            }
        }

        void Erstellungsassistent_FormClosing(object sender, FormClosingEventArgs e)
        {
            Filesource = FilesourceForward;
            MessageBox.Show(Filesource + "------------" + FilesourceForward);
            using (StreamReader sr = new StreamReader(Filesource))
                richTextBox_Fileview.Text = sr.ReadToEnd();                 //Datei in RichTextBox einlesen
        }



EDIT:
Habe gerade bemerkt, dass das ganze funktioniert, wenn die Form über das "X" geschlossen wird.
Ich muss die FormWizzard mit einem Button und "this.Hide();" schlissen, damit es mir alles sauber beendet.

Wie kann ich dies in den FormClosing Event miteinbeziehen?


EDIT2:

Habe es per Zufall herausgekriegt =D
Ich muss beim Close-Button in FormWizzard einfach bevor this.Hide(); noch this.Close(); einfügen. :)
 
Zuletzt bearbeitet:
Ist ja eigentlich auch logisch, Hide() versteckt das Fenster nur, da kann auch kein ClosingEvent kommen. Hide() nach Close() ist ebenfalls nicht sinnvoll, da Close() die gesamte Form beendet, da nutzt dann ein Hide() auch nix mehr.
 

Ähnliche Themen

Zurück
Oben