2009-05-15 56 views
19

Spesso quando si utilizza il software in questi giorni, il tasto ESC chiuderà una finestra di dialogo senza mantenere le modifiche apportate. Mi piace, soprattutto perché anche se la finestra di dialogo potrebbe avere un pulsante Annulla, non voglio necessariamente raggiungere il pulsante del mouse o la scheda sul pulsante Annulla. È un modo carino per dire "Oops, non intendevo farlo!" al software. Infatti, trovo che mi infastidisca con software che non implementa questa funzione e non posso credere che non sia già stato fatto sotto il cofano di Winforms - mi sembra intuitivo ...Come si ottiene il tasto ESC per chiudere una finestra di dialogo in Winforms?

Ho visto l'aggancio nell'evento Form KeyPress, o cercando di simulare una "Annulla" DialogResult ecc sembra che ci siano un certo numero di modi di andare su questo ...

Quindi la domanda è: qual è il modo più pulito di andare su vincolante il tasto ESC per chiudere la finestra di dialogo senza salvare le modifiche?

Qualsiasi aiuto da parte di coloro che hanno esperienza in questo è molto apprezzato!

risposta

27

Impostare la proprietà CancelButton del modulo per fare riferimento al pulsante Annulla.

+7

C'è anche un corrispondente "AcceptButton" per il tasto invio. Il vantaggio di questo metodo di risposta è che c'è più all'inserimento e all'esclusione di hook rispetto ai tasti - l'utilizzo di questo metodo renderà anche i suggerimenti visivi corretti sui pulsanti (ad esempio, AcceptButton ottiene un bordo più spesso). – stusmith

+5

Non dimenticare di impostare anche la proprietà DialogResult dei pulsanti Annulla e OK. – NascarEd

6

È inoltre possibile impostare la proprietà CancelButton del modulo per il pulsante di annullamento:

this.CancelButton = this.cancelButton; 

In Visual Studio è possibile impostare questa tramite le proprietà del modulo e il codice viene aggiunto ai Form.Designer. file cs

1

In una certa misura dipende dal proprio ambiente di sviluppo - in .NET è integrato (come era in vb.old), i moduli hanno una proprietà "Annulla pulsante" "Se questa proprietà è impostata, il pulsante viene 'cliccato' ogni volta che l'utente preme il tasto 'ESC'. "

C'è una corrispondente proprietà "AcceptButton" per il tasto "INVIO".

Dalla memoria, messaggio standard e le finestre di dialogo seguirà la logica sopra di default - anche se naturalmente si può specificare il tasto predefinito per una finestra di messaggio in cui non si vuole roba avvenga senza che l'utente affermare positivamente che questo è ciò che loro vogliono fare

1

Si può fare questo:

button b = new button(); 
b.click = button_click; 
this.cancelbutton = b; 


protected void button_click(object sender,eventargs e) 
{ 
    this.close(); 
} 
9

Per fare questo, quando non si dispone di un pulsante di annullamento è possibile ignorare ProcessCmdKey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Escape) 
    { 
    this.Close(); 
    return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+2

È possibile inserire un 'DialogResult = DialogResult.Cancel;' appena prima della riga 'this.Close();'. –

0
If e.KeyCode = Keys.Escape Then 
     If MsgBox("Are you sure to exit system (Y/N) ?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then Exit Sub 
     dashboard.Close() 

    ElseIf e.KeyCode = Keys.F5 Then 
     MessageBox.Show("F5") 
    End If 

Prova questo guys.This è per Mostra un messageBox per la conferma di Sì o No prima di chiudere i moduli. Puoi aggiungere questo codice al modulo nel modulo Evento denominato Keydown. Qui "dashboard" è il nome del nostro modulo da chiudere. Questo codice mostra una casella di messaggio con i pulsanti Sì o No. Se si seleziona Sì significa che chiuderà il modulo. Se si seleziona No, l'azione si annullerà. Il modulo rimane uguale

+1

Per favore aggiungi qualche spiegazione della tua risposta. :) –

+0

sì Certo ..è possibile aggiungere questo codice al modulo all'interno del modulo Evento denominato Keydown. Qui "dashboard" è il nome del nostro modulo da chiudere. Questo codice mostra una casella di messaggio con i pulsanti Sì o No. Se si seleziona Sì significa che chiuderà il modulo. Se si seleziona No, l'azione si annullerà. Il modulo rimane uguale – Prakash

+0

hai provato questo codice sopra menzionato? – Prakash