2009-09-04 14 views
8

Mam okno, które czasami otwierać przy użyciu Show(), a czasami przy użyciu ShowDialog(). W drugim przypadku zwracany wynik okna dialogowego jest dla mnie ważny. Ale jeśli ustawię DialogResult po wywołaniu Show() otrzymam InvalidOperationException. Czy istnieje sposób, aby dowiedzieć się, która metoda została użyta do otwarcia okna i ustawić odpowiednio, czy nie DialogResult? A może jest inny sposób?Ustawianie okna dialogowego DialogResult dopiero po ShowDialog() w WPF

Oczywiście wiem, że mogę złapać i zignorować wyjątek, ale nie podoba mi się to rozwiązanie.

Odpowiedz

9

Użyj wewnątrz okna, aby sprawdzić, czy działa na modalnym wątku, czy nie.

+0

Dzięki, właśnie tego chciałem. – svick

+0

Nie zawsze działa, w naszym przypadku musieliśmy owinąć DialogResult = x; wywołaj próbę/catch dla właściwego zachowania. – Doug

0

Co powiesz na ustawienie tej opcji.DialogResult = DialogResult.blah w zdarzeniu zamykającym formularz?

+1

Jak by to pomogło? To nadal ustawi to nawet po Show() i spowoduje wyjątek. BTW Używam WPF (nie określiłem tego wyraźnie), więc DialogResult jest bool ?. – svick

+0

zanim to zrobię. Zamknij(); w Oknie modalnym ustawiam ten DialogResult = DialogResult.OK; w głównej formie to jest dokładnie to, co otrzymuję. Dziękuję sgrassie :) – balexandre

3

Jeśli spojrzysz na set_DialogResult w Reflectorze, sprawdza _showingAsDialog, aby określić, czy dialog jest modalny. Niestety jest to pole prywatne.

Czy zawsze konstruujesz nową instancję okna przed wywołaniem Show()/ShowDialog(). Jeśli tak, możesz przekazać argument konstruktorowi wskazujący, w jaki sposób ma być wyświetlany.

2

Możesz użyć właściwości Form.Modal, aby sprawdzić rodzaj użytkowania.

W przypadku korzystania z Form.Show() należy użyć innego sposobu, aby powiadomić dzwoniącego o wszelkich wynikach Formularza.

Czy istnieje powód, aby korzystać z obu sposobów wyświetlania formularza?

+2

Ta właściwość nie istnieje w WPF – McAden

Powiązane problemy