2009-05-15 10 views
19

A menudo, cuando se utiliza el software en estos días, la tecla ESC se cerrará un cuadro de diálogo sin persistir los cambios que he realizado. Me gusta especialmente porque aunque el cuadro de diálogo puede tener un botón cancelar, no necesariamente quiero extender el mouse o la pestaña hacia el botón cancelar. Es una manera bonita y limpia de decir "¡Uy, no tenía la intención de hacer eso!" al software. De hecho, me molesta el software que no implementa esta característica y no puedo creer que no esté hecho bajo el capó de Winforms. Me parece intuitivo ...¿Cómo se obtiene la tecla ESC para cerrar un cuadro de diálogo en Winforms?

He visto el enganche en el evento Form KeyPress, o tratando de simular un "DialogResult" Cancelar, etc. Parece que hay varias formas de solucionar esto ...

Entonces la pregunta es: ¿Cuál es la forma más limpia de vincularse? la tecla ESC para cerrar el diálogo sin guardar ningún cambio?

¡Cualquier ayuda de aquellos que tienen experiencia en esto es muy apreciada!

Respuesta

27

Establezca la propiedad CancelButton del formulario para hacer referencia a su botón Cancelar.

+7

También hay un "AceptarBotón" correspondiente para la tecla Intro. La ventaja de este método de respuesta es que hay más para enganchar entradas y escapes que presionar teclas; usar este método también proporcionará las sugerencias visuales correctas en los botones (por ejemplo, AcceptButton obtiene un borde más grueso). – stusmith

+5

No olvide establecer también la propiedad DialogResult de sus botones cancelar y Aceptar. – NascarEd

6

También puede establecer la propiedad CancelButton de la forma del botón cancelar:

this.CancelButton = this.cancelButton; 

En Visual Studio puede establecer esto a través de las propiedades de la forma y se añade el código a la Form.Designer. archivo cs

1

Hasta cierto punto, depende de su entorno de desarrollo: en .NET está integrado (como lo era en vb.old), las formas tienen una propiedad "Cancelar botón" "Si se establece esta propiedad, el botón se 'hace clic' cada vez que el usuario presiona la tecla 'ESC'. "

Hay una propiedad correspondiente "AcceptButton" para la tecla 'ENTER'.

Desde la memoria, los mensajes estándar y los cuadros de diálogo seguirán la lógica anterior de forma predeterminada, aunque por supuesto se puede especificar el botón predeterminado para un cuadro de mensaje donde no quiere que suceda nada sin que el usuario afirme positivamente que eso es ellos quieren hacer

1

Usted puede hacer esto:

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


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

Para hacer esto cuando usted no tiene un botón de cancelación puede anular 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

Puede insertar un 'DialogResult = DialogResult.Cancel;' justo antes de su línea '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 

Prueba esto es guys.This Para Muestre un cuadro de mensajes para la confirmación de Sí o No antes de cerrar los formularios. Puede agregar este código en su formulario dentro del formulario Evento nombrado como Keydown. Aquí "tablero de instrumentos" es el nombre de Nuestro formulario que se cerrará. Este código muestra un cuadro de mensaje con los botones Sí o No. Si selecciona Sí, significa que cerrará su formulario. Si selecciona No, la Acción se cancelará. El formulario sigue siendo el mismo

+1

Por favor, agregue alguna explicación de su respuesta. :) –

+0

yup Seguro ...puede agregar este código en su formulario dentro del formulario Evento nombrado como Keydown. Aquí "tablero de instrumentos" es el nombre de Nuestro formulario que se cerrará. Este código muestra un cuadro de mensaje con los botones Sí o No. Si selecciona Sí, significa que cerrará su formulario. Si selecciona No, la Acción se cancelará. El formulario sigue siendo el mismo – Prakash

+0

¿has probado este código mencionado anteriormente? – Prakash

Cuestiones relacionadas