Laden...

MDI "X" Button - Keine Childs schließen

Erstellt von Stu42 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.570 Views
S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 17 Jahren
MDI "X" Button - Keine Childs schließen

Hallo,

ich habe eine MDI Form, mit verschiedenen Formen drin. Wenn ich das Programm verlassen will, möchte ich vorher einige Abfragen machen. Diese Abfragen machen ich in dem OnClosing Event. Das Problem dabei ist, dass für jedes mal klicken auf den "X" (Exit butten der Form) eine Form in der MDI-Form geschlossen wird, auch wenn ich bei den Event Argumenten "e.Cancel = true" mache.

Wie kann ich das nun verhindern, dass meine Formen in der MDI-Form geschlossen werden, wenn ich auf das "X" drücke?

Gruß Stu

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Stu42,

du verwendest vermutlich das Closing-Event. Hast du den EventHandler, in dem du e.Cancel auf true setzt, auch wirklich für das Event registriert?

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 17 Jahren

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing);

ja, der ist richtig regestriert.
Das die MDI-Childs geschlossen werden, müsste aber bereits vor dem OnClosing Event passieren, da sie schon weg sind, wenn das EventAufgerufen wird.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Stu42,

hm, laut Doku solle es so sein:

Das FormClosing-Ereignis tritt ein, während das Formular geschlossen wird. Wenn ein Formular geschlossen wird, wird es verworfen und gibt alle dem Formular zugeordneten Ressourcen frei. Wenn Sie dieses Ereignis abbrechen, bleibt das Formular geöffnet.

Du musst aber deinen Eigenen EventHandler registrieren und nicht OnFormClosing!

Also entweder OnFormClosing überschreiben oder einen eigene EventHandler schreiben und den registrieren. Nicht beides kombinieren.

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 17 Jahren

ich weiß nicht ganz was du meinst.

Wenn ich statt meinem normalen EventHandler , meinen Code in:

protected override void OnClosing(CancelEventArgs e)

schreibe, dann passiert das gleiche, also die Childs werden noch geschlossen.

Selbst wenn ich das Event komplett ignoriere mit:

protected override void OnClosing(CancelEventArgs e)
{
// base.OnClosing(e);
}

dann werden sie immer noch geschlossen.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Stu42,

tja, was soll ich sagen? Bei mir funktioniert das zuverlässig. Und bei dir sollte es das auch tun.

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 17 Jahren

ja wenn ich nen neues Projeckt mache, und das dann teste, dann funktioniert es.

Ich weiß inzwischen auuch woran das liegt das meine Formen versteckt werden.
Ich möchte meine CHild-Formen nicht shließen, also Verstecke ich sie.

Konkret sieht das in der Child-Form dann so aus:

private void OnChildFormClosing(object sender, FormClosingEventArgs e)
{

            Hide();  
            e.Cancel = true;  
 }  

Nur wie Löse ich das Problem nun? Ich möchte meine Child-Froms nicht schließen, sondern nur verstecken. Aber wenn ich das MDI nun schließen will, wird anscheinend das OnClosing Event von dem Child aufgerufen.