2009-07-14 12 views
10

C#/.NET 3.5/WinFormsModalne okno dialogowe z modalnego okna dialogowego - oba są zamknięte, gdy drugie jest zamknięte - dlaczego?

Mam formularz, który otwiera modalny formularz okna dialogowego, który otwiera inny modalny formularz okna dialogowego. W wewnętrznym formularzu dialogowym znajdują się przyciski OK i Anuluj, a odpowiednio ich przycisk AcceptButton i CancelButton.

Po naciśnięciu klawisza Enter lub kliknięciu przycisku OK w wewnętrznym oknie dialogowym zamyka się również zewnętrzne okno dialogowe. Nie widzę, gdzie to robię - czy to oczekiwane zachowanie?

Mogę podać kod, ale nie chcę go zaśmiecać.

+0

Czy zewnętrzne okno dialogowe działa modalnie [przez .ShowDialog]? Powinieneś być w stanie umieścić punkt przerwania po wywołaniu w debugerze. Ale myślę, że nie zapytałbyś, czy nie było w tym żadnej subtelności do tego, co robisz ... –

+0

Tak, przeszedłem przez kod, ale po prostu wyskoczył z wnętrza na zewnątrz, nie uderzając w nic. – serialhobbyist

Odpowiedz

17

Dzieje się tak, ponieważ wywołanie ShowDialog modyfikuje również stan jego właściciela.

Aby temu zapobiec, trzeba zresetować DialogResult pierwszego okna modalnego do DialogResult.None po ShowDialog wezwanie do drugiego okna:

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

Zostało dawna problem (patrz this stanowisko).

+0

To wszystko. Miałem przeczucie, że trafiłem na to wcześniej, ale nie mogłem go znaleźć, a Google nie pomógł. Problem rozwiązany. Dziękuję bardzo. – serialhobbyist

+0

Może to jest naprawione? Mam .NET 3.5 SP1 i nie * NIE * widzę tego zachowania. – NascarEd

+0

Prawdopodobnie tak. Właśnie wypróbowałem to na .Net 3.5 SP1 i nie dostałem tego zachowania. Zdecydowanie miałem to na .Net 2.0. – adrianbanks

0

Walczyłem z tym przez cały dzień, dopóki nie znalazłem tego postu. Nie zostało to naprawione w .NET 4.

Powiązane problemy