Comment fermer une fenêtre ou une boîte de dialogue (WPF .NET)

Dans cet article, vous allez découvrir les différentes façons de fermer une fenêtre ou une boîte de dialogue. Un utilisateur peut fermer une fenêtre à l’aide des éléments de la zone non cliente, y compris les éléments suivants :

  • L’élément Fermer du menu Système.
  • Appuyer sur ALT + F4.
  • Appuyer sur le bouton Fermer.
  • Appuyer sur Échap lorsqu’un bouton a la propriété IsCancel définie sur true sur une fenêtre modale.

Lors de la conception d’une fenêtre, fournissez davantage de mécanismes à la zone cliente pour fermer une fenêtre. Voici quelques-uns des éléments de conception courants d’une fenêtre utilisée pour la fermer :

  • un élément Quitter dans le menu Fichier, généralement pour les fenêtres d’application principales.
  • un élément Fermer dans le menu Fichier, généralement dans une fenêtre d’application secondaire.
  • un bouton Annuler, généralement dans une boîte de dialogue modale.
  • un bouton Fermer, généralement dans une boîte de dialogue non modale.

Important

Une fois qu’une fenêtre est fermée, la même instance d’objet ne peut pas être utilisée pour rouvrir la fenêtre.

Pour plus d’informations sur la durée de vie d’une fenêtre, consultez Vue d’ensemble des fenêtres WPF : Durée de vie de la fenêtre.

Fermer une fenêtre modale

Lors de la fermeture d’une fenêtre ouverte avec la ShowDialog méthode, définissez la DialogResult propriété true sur ou false pour indiquer un état « accepté » ou « annulé », respectivement. Dès que la DialogResult propriété est définie sur une valeur, la fenêtre se ferme. Le code suivant illustre la définition de la DialogResult propriété :

private void okButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = true;

private void cancelButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = True
End Sub

Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = False
End Sub

Vous pouvez également appeler la Close méthode. Si la Close méthode est utilisée, la DialogResult propriété est définie sur false.

Une fois qu’une fenêtre a été fermée, elle ne peut pas être rouverte avec la même instance d’objet. Si vous essayez d’afficher la même fenêtre, une InvalidOperationException fenêtre est levée. Au lieu de cela, créez une instance de la fenêtre et ouvrez-la.

Fermer une fenêtre sans mode

Lorsque vous fermez une fenêtre ouverte avec la Show méthode, utilisez la Close méthode. Le code suivant illustre la fermeture d’une fenêtre sans mode :

private void closeButton_Click(object sender, RoutedEventArgs e) =>
    Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
    Close()
End Sub

Fermer avec IsCancel

La Button.IsCancel propriété peut être définie pour permettre à true la touche ÉCHAP de fermer automatiquement la fenêtre. Cela fonctionne uniquement lorsque la fenêtre est ouverte avec ShowDialog la méthode.

<Button Name="cancelButton" IsCancel="True">Cancel</Button>

Masquer une fenêtre

Au lieu de fermer une fenêtre, une fenêtre peut être masquée avec la Hide méthode. Une fenêtre masquée peut être rouverte, contrairement à une fenêtre fermée. Si vous souhaitez réutiliser une instance d’objet de fenêtre, masquez la fenêtre au lieu de la fermer. Le code suivant illustre le masquage d’une fenêtre :

private void saveButton_Click(object sender, RoutedEventArgs e) =>
    Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
    Hide()
End Sub

Annuler fermer et masquer

Si vous avez conçu vos boutons pour masquer une fenêtre au lieu de la fermer, l’utilisateur peut toujours contourner ce problème et fermer la fenêtre. L’élément Fermer du menu système et le bouton Fermer de la zone non cliente de la fenêtre fermeront la fenêtre au lieu de la masquer. Considérez ce scénario lorsque votre intention est de masquer une fenêtre au lieu de la fermer.

Attention

Si une fenêtre s’affiche modalement avec ShowDialog, la DialogResult propriété est définie null lorsque la fenêtre est masquée. Vous devez renvoyer l’état au code appelant en ajoutant votre propre propriété à la fenêtre.

Lorsqu’une fenêtre est fermée, l’événement Closing est déclenché. Le gestionnaire est passé à un CancelEventArgs, qui implémente la Cancel propriété. Définissez cette propriété pour true empêcher la fermeture d’une fenêtre. Le code suivant montre comment annuler la fermeture et masquer à la place la fenêtre :

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    // Cancel the closure
    e.Cancel = true;

    // Hide the window
    Hide();
}
Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
    ' Cancel the closure
    e.Cancel = True

    ' Hide the window
    Hide()
End Sub

Il peut y avoir des moments où vous ne souhaitez pas masquer une fenêtre, mais en fait empêcher l’utilisateur de le fermer. Pour plus d’informations, consultez Vue d’ensemble des fenêtres WPF : Annuler la fermeture de la fenêtre.

Voir aussi