2009-07-14 12 views
10

C#/.NET 3.5/WinFormsBoîte de dialogue modale d'une boîte de dialogue modale - les deux se ferment quand la deuxième est fermée - pourquoi?

J'ai un formulaire qui ouvre un formulaire de dialogue modal qui ouvre un autre formulaire de dialogue modal. Le formulaire de dialogue interne a des boutons OK et Annuler et ses boutons AcceptButton et CancelButton leur sont respectivement affectés.

Lorsque j'appuie sur Entrée ou que vous cliquez sur OK dans la boîte de dialogue interne, la boîte de dialogue externe se ferme également. Je ne peux pas voir où je fais ceci - est ce comportement attendu?

Je peux fournir du code mais je ne voulais pas encombrer ça.

+0

La boîte de dialogue externe est-elle exécutée de manière modale [via .ShowDialog]? Vous devriez être en mesure de placer un point d'arrêt après l'appel dans un débogueur. Mais je suppose que vous n'auriez pas demandé s'il n'y avait pas de subtilité à ce que vous faites ... –

+0

Ouais, j'avais franchi le code mais il a juste sauté de l'intérieur vers l'extérieur sans rien toucher. – serialhobbyist

Répondre

17

Cela se produit car un appel ShowDialog modifie également l'état de son propriétaire.

Pour éviter cela, vous devez réinitialiser le DialogResult de la première boîte de dialogue modale à DialogResult.None après l'appel ShowDialog à la deuxième boîte de dialogue:

private void Button1_Click(object sender, EventArgs e) 
{ 
    InnerDialog inner = new InnerDialog() 
    DialogResult innerResult = inner.ShowDialog(this); 
    this.DialogResult = DialogResult.None; 
} 

Cela a été un problème de longue date (voir this poster).

+0

C'est tout. J'avais l'impression que je frapperais celui-ci avant longtemps mais je ne pouvais pas le trouver et Google n'a pas aidé. Problème résolu. Merci beaucoup. – serialhobbyist

+0

Peut-être est-ce corrigé? J'ai .Net 3.5 SP1 et ne * PAS * voir ce comportement. – NascarEd

+0

Peut-être. Je viens de l'essayer sur .Net 3.5 SP1 et n'ai pas eu le comportement. Je l'ai certainement eu sur. Net 2.0 cependant. – adrianbanks

0

J'ai lutté avec cela toute la journée jusqu'à ce que je trouve ce post. Il n'a pas été corrigé dans .NET 4.

Questions connexes