2012-03-20 14 views
5

Otwieram formularz jako modalne okno dialogowe przy użyciu ShowDialog. To okno dialogowe z kolei umożliwia otwarcie innego formularza jako modalnego okna dialogowego ponownie za pomocą ShowDialog.Dlaczego zamykanie zagnieżdżonego okna podrzędnego powoduje również zamknięcie okna nadrzędnego?

Gdy wewnętrzne okno dialogowe jest zamknięte, powoduje to również zamknięcie okna nadrzędnego. Dlaczego tak się dzieje i jak mogę temu zapobiec?

Stworzyłem hello światowej wersji problemu, aby to zilustrować.

Postać 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)); 
} 

Postać 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)); 
} 

Postać 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; 

Kroki prowadzące do odtworzenia:

  • kliknij "Otwórz formularz 2"
  • kliknij "Otwórz formularz 3"
  • przycisk "Anuluj"

Formularz 3 zamyka DialogResult == Anuluj zgodnie z oczekiwaniami, ale Formularz 2 zamyka się również z DialogResult == Anuluj (nieoczekiwane).

+0

Mmh, próbowałem i to [działa dobrze na moim komputerze] (http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c- Liczba Pi). Powinniśmy zobaczyć cały (prawdziwy) kod, aby zrozumieć problem. Możesz użyć http://pastebin.com/, aby wkleić długie fragmenty kodu ... – digEmAll

+0

Działa również dla mnie. –

+0

Wkleiłem kod tutaj: http://pastebin.com/Dj81gAze –

Odpowiedz

14

EDIT:

problemem jest to jeden (plik: Form2.Designer.cs):

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

po kliknięciu OpenForm3Button, po zakończeniu obsługi OpenForm3Button_Click zdarzeń, form.DialogResult jest automatycznie ustawiany do Cancel i jest zamknięty.

Resetuj własność OpenForm3ButtonDialogResult i będzie działać zgodnie z oczekiwaniami :)

+0

Nie mam pojęcia, jak to się stało. Dziwne jest to, że zrobił to w moim głównym projekcie i zrobił to samo w świecie cześć, który założyłem. Musiałem popełnić ten sam błąd za każdym razem. Działa teraz idealnie. Dziękuję bardzo. Następnym razem będę dokładniej sprawdzać takie rzeczy. –

+3

@WarrenBlumenow: Jeśli najpierw dodano przycisk anulowania, a następnie skopiowano (za pomocą CTRL-C lub CTRL-mousedrag), aby utworzyć przycisk otwierania, wszystkie właściwości poprzedniego są kopiowane w drugim. Zdarza się to bardzo często. :) – digEmAll

+1

Och, wow.Wydaje się, że miałem ten błąd, ponieważ najpierw ustawiałem przycisk CancelButton na formularzu, a następnie skopiowałem ten przycisk, aby wykonać drugi przycisk. Wygląda na to, że ustawienie CancelButton formularza automatycznie ustawia przycisk DialogResult. Dobrze wiedzieć. – Nyerguds

Powiązane problemy