Condividi tramite


Come chiudere una finestra o una finestra di dialogo (WPF .NET)

In questo articolo verranno illustrati i diversi modi per chiudere una finestra o una finestra di dialogo. Un utente può chiudere una finestra usando gli elementi nell'area non client, inclusi i seguenti:

  • Voce Chiudi del menu Sistema.
  • ALT + F4.
  • Pulsante Chiudi.
  • Tasto ESC quando un pulsante ha la proprietà IsCancel impostata su true su una finestra modale.

Quando si progetta una finestra, fornire più meccanismi all'area client per chiudere una finestra. Alcuni degli elementi di progettazione comuni di una finestra usati per chiuderlo includono quanto segue:

  • Voce Esci nel menu File, in genere per la finestra principale dell'applicazione.
  • Voce Chiudi nel menu File, in genere in una finestra dell'applicazione secondaria.
  • Pulsante Annulla, in genere in una finestra di dialogo modale.
  • Pulsante Chiudi, in genere in una finestra di dialogo non modale.

Importante

Una volta chiusa una finestra, non è possibile usare la stessa istanza dell'oggetto per riaprire la finestra.

Per altre informazioni sulla durata di una finestra, vedere Panoramica delle finestre WPF: durata della finestra.

Chiudere una finestra modale

Quando si chiude una finestra aperta con il ShowDialog metodo , impostare la DialogResult proprietà true su o false per indicare rispettivamente uno stato "accettato" o "annullato". Non appena la DialogResult proprietà è impostata su un valore, la finestra viene chiusa. Il codice seguente illustra l'impostazione della DialogResult proprietà :

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

È anche possibile chiamare il Close metodo . Se viene utilizzato il Close metodo , la DialogResult proprietà viene impostata su false.

Una volta chiusa una finestra, non può essere riaperta con la stessa istanza dell'oggetto. Se si tenta di visualizzare la stessa finestra, viene generata un'eccezione InvalidOperationException . Creare invece una nuova istanza della finestra e aprirla.

Chiudere una finestra senza modalità

Quando si chiude una finestra aperta con il Show metodo , usare il Close metodo . Il codice seguente illustra la chiusura di una finestra senza modalità:

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

Chiudi con IsCancel

La Button.IsCancel proprietà può essere impostata su true per abilitare la chiave ESC per chiudere automaticamente la finestra. Questa operazione funziona solo quando la finestra viene aperta con ShowDialog il metodo .

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

Nascondere una finestra

Invece di chiudere una finestra, una finestra può essere nascosta con il Hide metodo . Una finestra nascosta può essere riaperta, a differenza di una finestra chiusa. Se si intende riutilizzare un'istanza dell'oggetto finestra, nascondere la finestra anziché chiuderla. Il codice seguente illustra come nascondere una finestra:

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

Annulla chiusura e nascondi

Se hai progettato i pulsanti per nascondere una finestra invece di chiuderla, l'utente può comunque ignorarlo e chiudere la finestra. La voce Chiudi del menu di sistema e il pulsante Chiudi dell'area non client della finestra chiuderà la finestra invece di nasconderla. Si consideri questo scenario quando la finalità consiste nel nascondere una finestra anziché chiuderla.

Attenzione

Se una finestra viene visualizzata in modalità modally con ShowDialog, la DialogResult proprietà verrà impostata su null quando la finestra è nascosta. Sarà necessario comunicare di nuovo lo stato al codice chiamante aggiungendo la propria proprietà alla finestra.

Quando una finestra viene chiusa, viene generato l'evento Closing . Il gestore viene passato a , CancelEventArgsche implementa la Cancel proprietà . Impostare tale proprietà su true per impedire la chiusura di una finestra. Il codice seguente illustra come annullare la chiusura e nascondere invece la finestra:

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

In alcuni casi potrebbe non essere necessario nascondere una finestra, ma impedire all'utente di chiuderla. Per altre informazioni, vedere Panoramica delle finestre WPF: Annullare la chiusura della finestra.

Vedi anche