Quand serait-ShowDialog () return null?
-
13-09-2019 - |
Question
WPF méthode Window.ShowDialog
retourne un nullable booléen. CommonDialog.ShowDialog
.
Maintenant, je comprends les cas où ceux-ci reviendraient faux (utilisateur a cliqué sur Annuler ou pressé Esc), et quand ils retourneraient vrai (code définit Window.DialogResult
true, probablement en réponse à l'utilisateur clique dessus OK). Mais nulle?
Ma première pensée est que cliquant sur le bouton Fermer de la barre de titre pourrait retourner null. Mais l'état docs (et je confirmé par des tests) que la barre de titre bouton Fermer est traité comme Annuler .
Alors, quand serait Window.ShowDialog
ou CommonDialog.ShowDialog
jamais return null?
La solution
La méthode renvoie toujours vrai ou faux, ce qui est toujours égale à la propriété DialogResult de la fenêtre au moment où elle se ferme.
Mais la propriété DialogResult est nulle avant que la fenêtre est fermée, et un autre thread pourrait vérifier la propriété. Ainsi, il sorte de logique que la valeur de retour est un booléen annulable pour correspondre à la propriété, même si elle est jamais vraiment nulle.
Autres conseils
Si je retourne DialogResult = null dans l'événement Click pour un bouton, la fenêtre reste ouverte.
private void OkButton_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if ( btn != null )
{
// forces all control to update...
btn.Focus();
}
// TEST IF OK TO CLOSE
bool rc = _vm.ProcessOkCommand();
if (rc)
{
DialogResult = true;
}
else
{
DialogResult = null;
}
}
<Button Content="OK" Name ="cmdOK" IsDefault="True" Click="OkButton_Click"/>
Je peux vous donner un exemple que je viens rencontrais. Window.ShowDialog()
renvoie null lorsque vous effectuez les étapes suivantes:
- Vous fermez d'abord toutes les fenêtres de votre
Application
. - Tous les autres objets
Window
qui ont été instanciés jusqu'à présent avec le mot-clénew
sont fermés. - Vous essayez d'instancier un nouveau
Window
et essayer d'appelerWindow.ShowDialog()
là-dessus. Il renvoie null.
En effet, vous avez sans doute pas Window
existant sous lequel votre nouvelle boîte de dialogue peut se lier à pour se comporter comme une boîte de dialogue qui possède le plus haut état de la fenêtre.