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
- Panoramica delle finestre WPF
- Panoramica delle finestre di dialogo
- Come aprire una finestra o una finestra di dialogo
- System.Windows.Window.Close()
- System.Windows.Window.Closing
- System.Windows.Window.DialogResult
- System.Windows.Window.Hide()
- System.Windows.Window.Show()
- System.Windows.Window.ShowDialog()
.NET Desktop feedback