2012-03-20 16 views
5

Apre un modulo come finestra di dialogo modale utilizzando ShowDialog. Questa finestra a sua volta consente di aprire nuovamente un altro modulo come una finestra di dialogo modale utilizzando ShowDialog.Perché la chiusura di una finestra di dialogo figlio nidificata chiude anche la finestra di dialogo principale?

Quando la finestra di dialogo più interna è chiusa, anche la finestra di dialogo principale viene chiusa. Perché questo si verifica e come posso prevenirlo?

Ho creato una versione mondiale del problema per illustrare questo.

Forma 1:

Form 1

private void OpenForm2Button_Click(object sender, EventArgs e) 
{ 
    Form2 testForm = new Form2(); 
    DialogResult dialogResult = new DialogResult(); 
    dialogResult = testForm.ShowDialog(); 
    MessageBox.Show("Form 2 returned: " + Convert.ToString(dialogResult)); 
} 

Forma 2:

Form 2

... 
this.Form2OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Form2CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
... 
this.AcceptButton = this.Form2OKButton; 
this.CancelButton = this.Form2CancelButton; 
... 
private void OpenForm3Button_Click(object sender, EventArgs e) 
{ 
    Form3 testForm = new Form3(); 
    DialogResult dialogResult = new DialogResult(); 
    dialogResult = testForm.ShowDialog(); 
    MessageBox.Show("Form 3 returned: " + Convert.ToString(dialogResult)); 
} 

Forma 3:

Form 3

... 
this.Form3OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Form3CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
... 
this.AcceptButton = this.Form3OKButton; 
this.CancelButton = this.Form3CancelButton; 

Procedura per riprodurre:

  • Fare clic su "Open Form 2"
  • Fare clic su "Open Form 3"
  • su "Annulla"

Modulo 3 si chiude con DialogResult == Annulla come previsto, ma il modulo 2 si chiude anche con DialogResult == Annulla (non previsto).

+0

Mmh, ho provato ed è [funziona bene sulla mia macchina] (http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c- pi). Dovremmo vedere l'intero codice (reale) per capire il problema. Puoi usare http://pastebin.com/ per incollare lunghi pezzi di codice ... – digEmAll

+0

Funziona anche per me. –

+0

Ho incollato il codice qui: http://pastebin.com/Dj81gAze –

risposta

14

EDIT:

il problema è questo uno (file: Form2.Designer.cs):

this.OpenForm3Button.DialogResult = System.Windows.Forms.DialogResult.Cancel; 

quando si fa clic sul OpenForm3Button, dopo la fine del gestore OpenForm3Button_Click caso, il form.DialogResult viene impostata automaticamente a Cancel ed è chiuso.

reimpostare la proprietà DialogResult di OpenForm3Button e funzionerà come previsto :)

+0

Non ho idea di come sia stato impostato. La cosa strana è che lo ha fatto nel mio progetto principale e ha fatto la stessa cosa nel mondo Hello Hello che ho creato. Devo aver commesso lo stesso errore entrambe le volte. Funziona perfettamente ora. Grazie mille. Verificherò la cosa più attentamente la prossima volta. –

+3

@WarrenBlumenow: se prima hai aggiunto il pulsante Annulla e dopo lo hai copiato (utilizzando CTRL-C o CTRL-mousedrag) per creare il pulsante Apri, tutte le proprietà del primo vengono copiate in quest'ultimo. Succede molto spesso. :) – digEmAll

+1

Oh, wow.Sembra che ho avuto questo errore perché ho prima impostato un CancelButton sul modulo e poi ho copiato quel pulsante per creare un secondo pulsante. Sembra che l'impostazione del pulsante Annulla del modulo imposti automaticamente il DialogResult del pulsante. Buono a sapersi. – Nyerguds

Problemi correlati