C# Form schliessen, Form wider öffnen = Fehler

Atreju93

Lieutenant
Registriert
Nov. 2010
Beiträge
596
Hallo zusammen

Ich habe ein Programm geschrieben mit mehreren Forms, welche ich jeweils mit Button_Click und Form.Show(); aufrufe.

Ich muss jedoch einen Event machen, wenn die Form wider geschlossen wird, deshalb muss ich thix.Close(); beim Schliessen verwenden.

mein Problem ist, wenn ich die Form ein zweites mal öffnen will, kommt der Fehler, dass auf das verworfene Objekt nicht mehr zugegriffen werden kann. natürlich ist ja klar, ich müsste this.Hide(); verwenden.

Aber ich habe keine Möglichkeit herausgefunden ein FormClosing Event zu erstellen, wenn die form mit this.Hide(); geschlossen wird...

Könnt ihr mir helfen?

Den Code zu posten ist etwas umständlich, da es dochmittlerweile über 1'000 Code - Zeilen sind und mehrere Forms.

Gruss
 
Wenn du die Form mit "Close" schließt wird automatisch ein "Dispose" gemacht, d. h. das Form-Objekt zerstört.
Wenn du die Form wieder öffnen willst, muss du erst ein neues Objekt mit erzeugen:
Code:
DeineForm form = new DeineFrom();
form.Show();
 
Ich habe die Hauptform: FormMain

Und dort öffne ich eine der weiteren Forms folgendermassen (Hier FormWizzard)
Code:
        private void button_wizzard_Click(object sender, EventArgs e)
        {
            aktivate_buttons();                             //Alle Buttons nach Klick wider aktivieren
            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();

                    Erstellungsassistent.FilesourceForward = this.FilesourceForward;
                    Erstellungsassistent.FormClosing += new FormClosingEventHandler(Erstellungsassistent_FormClosing);
                    MessageBox.Show("Diese Vorlagen stehen unter Copyright von:" + Environment.NewLine + "(c)Copyright by S.I.S.Papenburg / www.on-mouseover.de/templates/" + Environment.NewLine + "und dürfen aussschliesslich für private Zwecke verwendet werden");
                    Erstellungsassistent.Show();

                }

            }
            else
            {
                Erstellungsassistent.FilesourceForward = this.FilesourceForward;
                Erstellungsassistent.FormClosing += new FormClosingEventHandler(Erstellungsassistent_FormClosing);
                MessageBox.Show("Diese Vorlagen stehen unter Copyright von:" + Environment.NewLine + "(c)Copyright by S.I.S.Papenburg / www.on-mouseover.de/templates/" + Environment.NewLine + "und dürfen aussschliesslich für private Zwecke verwendet werden");
                Erstellungsassistent.Show();
            }

In FormWizzard schliesse ich die Form folgendermassen:

Code:
        private void button_close_Click(object sender, EventArgs e)
        {            
            this.Hide();
            this.Close();

        }

das this.Hide(); und this.Close(); war ein verzweifelter Versuch von mir.

Den Eventhandler für das EventClosing ist im Ersten Codeteil im Button_Wizzard-Click enthalten


EDIT:
Vielen dank, das Erstellungsassistent = new FormWizzard(); vor dem Erstellungsassistent.Show(); hat funktioniert.. =D

EDIT2:

Zu früh gefreut, nun wird irgendwo eine Variable o.Ä. nicht richtig weitergegeben und ich erhalte beim Erstellen eines Directorys in der geöffneten Form einen Fehler.

Wie muss ich die Form richtig öffnen?

Hier mal der Code, wo ich die Formen eröffne (in FormMain)

Code:
        //Die Form laden
        private FormSettings Grundeinstellungen;
        private FormWizzard Erstellungsassistent;
        private FormFastWizzard Blitzwizzard;

        #region Initialisierung ----------------------------------------------

        public FormMain()
        {
            InitializeComponent();
            Grundeinstellungen = new FormSettings();
            Erstellungsassistent = new FormWizzard();
            Blitzwizzard = new FormFastWizzard();
        }

Und die Form öffne ich jetzt folgendermassen:

Code:
        private void button_wizzard_Click(object sender, EventArgs e)
        {
            aktivate_buttons();                             //Alle Buttons nach Klick wider aktivieren
            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();

                    Erstellungsassistent.FilesourceForward = this.FilesourceForward;
                    Erstellungsassistent.FormClosing += new FormClosingEventHandler(Erstellungsassistent_FormClosing);
                    MessageBox.Show("Diese Vorlagen stehen unter Copyright von:" + Environment.NewLine + "(c)Copyright by S.I.S.Papenburg / www.on-mouseover.de/templates/" + Environment.NewLine + "und dürfen aussschliesslich für private Zwecke verwendet werden");
                    Erstellungsassistent  = new FormWizzard();
                    Erstellungsassistent.Show();

                }

            }
            else
            {
                Erstellungsassistent.FilesourceForward = this.FilesourceForward;
                Erstellungsassistent.FormClosing += new FormClosingEventHandler(Erstellungsassistent_FormClosing);
                MessageBox.Show("Diese Vorlagen stehen unter Copyright von:" + Environment.NewLine + "(c)Copyright by S.I.S.Papenburg / www.on-mouseover.de/templates/" + Environment.NewLine + "und dürfen aussschliesslich für private Zwecke verwendet werden");
                //Erstellungsassistent = new FormWizzard();
                Erstellungsassistent.Show();
            }
        }
 
Zuletzt bearbeitet:
Wenn du this.Hide() benutzt, warum nimmst du dann nicht einfach das VisibleChanged Event?
 
Ich habs herausgefunden.. es wäre so einfach -.-

ich muss einfach das Erstellungsassisten = new FormWizzard(); gerade in die erste Zeile nach dem Else schreiben.... also Bevor ich die Variabeln zuweise... dann geht es..
 
locomarco's Vorschlag wäre der logischere Weg das Problem anzugehen.
 

Ähnliche Themen

Zurück
Oben