2009-12-08 14 views
7

Qualcuno sa come scoprire se la finestra wpf è stata chiusa dal pulsante "x"?Come sapere se la finestra è stata chiusa dal pulsante "x"?

+0

Potete chiarire? Vuoi distinguere tra premere il pulsante "X" e altri mezzi per chiudere la finestra (cioè la tastiera)? O qualsiasi mezzo per chiudere la finestra? –

+0

distinguere tra premere il tasto "X" e altri mezzi per chiudere la finestra (cioè la tastiera) – Vytas999

+1

Penso che sarebbe utile se spieghi perché vuoi farlo. Per l'utente, non dovrebbe importare se è chiuso dalla X o da una voce di menu. Forse allora possiamo aiutarti a ottenere ciò che vuoi veramente fare –

risposta

11

Il modo più semplice (secondo me) è di memorizzare un valore booleano che indica se un utente ha chiuso il modulo tramite un altro metodo/i.

Quindi, nell'evento OnClosing, eseguire un controllo per verificare se il valore booleano è falso (a indicare che il pulsante x è stato selezionato).

L'unico problema con questo è il fatto che hai impostato il booleano da solo. Se questo è possibile dipende dall'altro modo in cui l'utente potrebbe chiudere il modulo.

MODIFICA: Devo sottolineare che questo è altamente dipendente dagli altri modi in cui il modulo può essere chiuso. Se hai un numero di metodi che chiudono questa finestra chiamando Window.Close(), vorrei prendere in considerazione la creazione di un singolo metodo chiamato UserClose(), che fa l'impostazione booleana per te.

public void UserClose() 
{ 
    NonXClose = true; 
    this.Close(); 
} 

Ciò consentirà al codice esterno di chiudere la finestra, con l'impostazione del valore booleano.

3

La differenza è la seguente:

Window.Close() causa WM_CLOSE da inviare alla finestra.

Alt + pulsante F4 e X causa il messaggio WM_SYSCOMMAND con tipo SC_CLOSE. Puoi decidere se inoltrare questo messaggio ulteriormente (e causare WM_CLOSE alla fine).

Look for my answer with code example here

Problemi correlati