2009-07-14 19 views
10

C#/.NET 3.5/WinFormsFinestra di dialogo modale da una finestra di dialogo modale - entrambi chiudono quando il secondo è chiuso - perché?

Ho un modulo che apre una finestra di dialogo modale che apre un'altra finestra di dialogo modale. La finestra di dialogo interna ha i pulsanti OK e Annulla e rispettivamente AcceptButton e CancelButton.

Premendo Invio o facendo clic su OK nella finestra di dialogo interna, si chiude anche la finestra di dialogo esterna. Non riesco a vedere dove sto facendo questo - è questo comportamento previsto?

Posso fornire il codice ma non volevo ingombrare.

+0

La finestra di dialogo esterna è in esecuzione in modalità Modale [tramite .ShowDialog]? Dovresti essere in grado di inserire un punto di interruzione dopo la chiamata in un debugger. Ma immagino che non avresti chiesto se non ci fosse qualche sottigliezza su quello che stai facendo ... –

+0

Sì, avevo passato il codice ma è saltato fuori dall'interno verso l'esterno senza colpire nulla. – serialhobbyist

risposta

17

Ciò accade perché una chiamata ShowDialog modifica anche lo stato del proprietario.

Per evitare che ciò accada, è necessario reimpostare la DialogResult della prima finestra di dialogo modale al DialogResult.None dopo la ShowDialog chiamata alla seconda finestra:

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

Questo è stato un problema di lunga data (vedi this inviare).

+0

Ecco fatto. Ho avuto la sensazione di averlo colpito molto tempo fa, ma non riuscivo a trovarlo e Google non mi ha aiutato. Problema risolto. Grazie mille. – serialhobbyist

+0

Forse è stato corretto? Ho. NET 3.5 SP1 e faccio * NOT * vedere questo comportamento. – NascarEd

+0

Forse così. Ho appena provato su. NET 3.5 SP1 e non ho ottenuto il comportamento. Ho sicuramente avuto su. NET 2.0 però. – adrianbanks

0

Ho lottato con questo tutto il giorno fino a quando ho trovato questo post. Non è stato risolto in .NET 4.

Problemi correlati