2011-05-23 3 views
5

Dans mon application C#, la méthode suivante est appelée lorsque le formulaire principal se ferme.Fermeture du formulaire parent lorsque le formulaire enfant se ferme

private void FormMain_Closing(object sender, FormClosingEventArgs e) 
{ 
     // Show this dialog when the user tries to close the main form 
     Form testForm = new FormTest(); 
     testForm.StartPosition = FormStartPosition.CenterParent; 
     testForm.ShowDialog(); 
} 

Ceci crée une boîte de dialogue qui affichera la fermeture du formulaire principal. Cependant, mon problème est que lorsque l'utilisateur ferme testForm, le formulaire principal se ferme immédiatement après. J'ai essayé toutes sortes de variantes de e.Cancel = true; et ainsi, et ne peut toujours pas annuler la fermeture du formulaire principal.

Des idées?


Edit: on dirait que je suis en cours d'exécution dans un problème en utilisant deux ShowModal() « s successivement. En regardant dans la question ...


Edit: Utilisé this.DialogResult = DialogResult.None; et il semble avoir résolu mon problème. Il s'agit apparemment d'un problème connu dans WinForms lors de l'ouverture d'une boîte de dialogue modale à partir d'un dialogue modal.

+1

Je vous suggère de mettre votre solution dans une «réponse» à votre «question» et de la marquer comme la bonne réponse. De cette façon, d'autres personnes sauront que cette question a déjà été répondue - et verront aussi ce que vous avez fait pour résoudre le problème. – Mel

Répondre

2

Ce code fonctionne très bien avec moi. Je pense qu'il y a un problème dans une autre partie de votre code.

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    Form testForm = new FormTest(); 
    testForm.StartPosition = FormStartPosition.CenterParent; 
    testForm.ShowDialog(); 

    e.Cancel = testForm.DialogResult == DialogResult.Cancel; 
} 
1

Cela pourrait être géré par les enfants aussi de la docs:

Si une forme a un enfant ou appartenant à formes, un événement FormClosing est également élevé pour chacun d'eux. Si l'un des formulaires annule l'événement, aucun des formulaires n'est fermé. Par conséquent, les événements FormClosed correspondants sont et ne sont envoyés à aucun des formulaires.

1

Je sais que vous mentionnez dans votre question que vous avez essayé d'utiliser 'e.Cancel = true;' Cependant, le code suivant fonctionne dans mon environnement (.NET 4.0, Visual Studio 2010, Windows 7):

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { 
    // Show this dialog when the user tries to close the main form 
    Form testForm = new FormTest(); 
    testForm.StartPosition = FormStartPosition.CenterParent; 
    testForm.ShowDialog(); 
    e.Cancel = true; 
} 

Si cela ne fonctionne pas dans votre cas, vous pouvez avoir d'autres gestionnaires d'événements au travail. Dans ce cas, essayez ce code dans une application Windows Forms nouvellement générée.

+0

Aussi, .NET 4.6, VS 2015, Win 7 (après presque 6 ans, vous obtenez un vote up :) Notez que vous devez suivre le résultat [s] de tous les formulaires enfants qui ont été ouverts. –

Questions connexes