2009-09-04 11 views
8

Ho una finestra che a volte apro usando Show() e talvolta usando ShowDialog(). Nel secondo caso, il risultato del dialogo restituito è importante per me. Ma se imposto lo dopo aver chiamato Show(), ottengo un InvalidOperationException. C'è un modo per scoprire quale metodo è stato utilizzato per aprire la finestra e impostare o no lo di conseguenza? oppure c'è un'altro modo?Impostazione di DialogResult solo dopo ShowDialog() in WPF

Ovviamente so che è possibile rilevare e ignorare l'eccezione, ma questa soluzione non mi piace.

risposta

9

Utilizzare System.Windows.Interop.ComponentDispatcher.IsThreadModal all'interno della finestra per determinare se viene eseguito su un thread modale o meno.

+0

Grazie, è esattamente quello che volevo. – svick

+0

Non funziona sempre, nel nostro caso dovevamo chiudere DialogResult = x; chiamare un tentativo/cattura per un comportamento corretto. – Doug

0

Che ne dici di impostare questo.DialogResult = DialogResult.blah nell'evento di chiusura del modulo?

+1

Come sarebbe di aiuto? Questo lo imposterà anche dopo Show() e causerà l'eccezione. BTW Io uso WPF (non l'ho specificato chiaramente) quindi il DialogResult è bool ?. – svick

+0

prima di fare questo.Chiudi(); nella finestra modale ho impostato this.DialogResult = DialogResult.OK; e nella forma principale questo è esattamente ciò che ottengo. Grazie sgrassie :) – balexandre

3

Se si guarda set_DialogResult in Reflector, controlla _showingAsDialog per determinare se la finestra di dialogo è modale. Purtroppo questo è un campo privato.

Costruisci sempre una nuova istanza della finestra prima di chiamare Show()/ShowDialog(). In tal caso, è possibile passare un argomento al costruttore che indica come deve essere mostrato.

2

È possibile utilizzare la proprietà Form.Modal per verificare il tipo di utilizzo.

In caso di utilizzo di Form.Show() è necessario utilizzare un altro modo per consentire al chiamante di conoscere eventuali risultati del modulo.

C'è un motivo per utilizzare entrambi i modi di mostrare il modulo?

+2

Quella proprietà non esiste in WPF – McAden