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?

Était-ce utile?

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'appeler Window.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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top