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:
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:
...
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:
...
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).
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
Działa również dla mnie. –
Wkleiłem kod tutaj: http://pastebin.com/Dj81gAze –