2009-02-12 8 views
14

Supponendo che il codice:.NET: come avere Escape chiude un MessageBox.Show()?

MessageBox.Show(this, 
     "Would you like the differential girdle spring on the up-end of the grammeters?", 
     "Smi-Boloid Stater Slots", 
     MessageBoxButtons.YesNo, 
     MessageBoxIcon.Warning); 

alt text http://i41.tinypic.com/rayots.jpg

Se l'utente preme fuga, lo voglio per chiudere la finestra di messaggio, e il metodo Show() posso tornare DialogResult.None.

Domanda correlata: come abilitare la "X" nell'angolo in alto a destra di un MessageBox.Vedere l'interruzione dell'utente?


Un po 'come una finestra di dialogo di conferma di Esplora risorse di Windows consente di premere escape per interrompere.

Un po 'come una finestra di dialogo di conferma di Internet Explorer che consente di premere escape per interrompere.

Un po 'come una finestra di dialogo di conferma di Outlook consente di premere escape per interrompere.

Un po 'come come ogni finestra nella storia dell'universo lascia l'utente preme fuga, o fare clic su X, per dire:

"Non ho idea di che cosa terrena sei chiedermi , per favore non rompere il mio computer ".


From the Vista UX Guidelines

Usa pulsanti Sì e No solo per rispondere a sì o no domande. L'istruzione principale deve essere naturalmente espressa come domanda si o no. Non utilizzare mai OK e Annulla per rispondere o no alle domande .

risposta

3

Non credo che questo sia possibile, anche se il tipico equivalente è specificando una delle MessageBoxButtons bandiere con Annulla (specificamente YesNoCancel nel tuo caso).

Dovrebbe essere abbastanza semplice ricreare la propria funzione MessageBox con questa funzione, se proprio lo si desidera, anche se veramente Annulla fa il lavoro.

+0

Accettato per "non possibile" –

12

Devi attivare l'opzione "Annulla" con il valore enum "MessageBoxButtons.YesNoCancel"

Ciò restituirà DialogResult.Cancel

+0

o MessageBoxButtons.OKCancel – Powerlord

+0

Tranne l'annullamento non è una risposta valida alla domanda "Sei sicuro di volere ..." –

+0

... e l'escape non è una risposta valida a "Sì o No?" –

1

Ho il sospetto che se si include MessageBoxButtons.YesNoCancel, per impostazione predefinita Fuga è cablata per cancellare che restituirà un MessageBoxResult di Annulla.

+0

Che cosa significa se l'utente preme "No" versi "Annulla"? –

+0

No e Annulla significano essenzialmente la stessa cosa in questo caso. SìNoCancel è appropriato per cose come "Vuoi salvare le modifiche al tuo documento prima di chiudere HelloWorld?" Sì: salvare per favore. No: chiudi senza salvare. Annulla: non chiudere o salvare, basta tornare indietro. – JMD

+1

Ma entrambi essenzialmente fanno la stessa cosa, ecco perché vogliamo un'opzione di fuga !! Non so perché Microsoft lo manca! E ora anche se No e cancella significano cose diverse, perché non riesco a sfuggire a una finestra di dialogo Sì No! Ho tirato uno dei miei per affrontare questo problema .. – nawfal

1

Oltre alle altre risposte probabilmente è cattiva pratica di consentire a un utente per chiudere una finestra con uscita a meno che non mostra un pulsante "Annulla" in quanto questo si differenzia dal comportamento di default che gli utenti si aspettano da applicazioni Windows e possono diventare incerti per quanto riguarda l'azione che hanno appena fatto premendo il tasto Esc.

Come già accennato aggiungendo un pulsante "Annulla" creerà automaticamente l'effetto desiderato.

+0

Fuga significa "Oh merda, non volevo farlo, fingo di non aver fatto quello che ho fatto per far apparire questa cosa". –

1

Penso che MessageBox (sia quello in WinForms sia WPF) sia uno di quei componenti che è meglio ridefinito. Il suo comportamento è così rigido che qualsiasi tipo di refactoring è quasi impossibile. In breve, tira il tuo - in questo modo puoi far chiudere Escape e qualsiasi altra cosa tu richieda.

C'è un progetto su CodePlex chiamato InfoBox che potrebbe essere utile.

1

Suona come MessageBoxButtons.OkCancel è ciò che stai cercando, sei semplicemente appeso al fatto che la domanda non corrisponde a Ok/Annulla.

In teoria è possibile scrivere il proprio modulo MessageBox che fa la stessa cosa e associa No al tasto Esc, che realizzerebbe esattamente quello che si desidera, con un po 'di lavoro extra.

Un'altra opzione è quella di riformulare la tua domanda, ad esempio:

MessageBox.Show(this, "The following operation will format your computer.\r\nPress Ok to continue, Cancel to abort", "Confirm Format", MessageBoxButtons.OkCancel, MessageBoxIcon.Warning); 

Solo un esempio, ma è probabile che la soluzione più semplice al tuo dilemma.

+1

Usabilità e facilità d'uso. Hmmm –

Problemi correlati