2009-11-25 37 views
10

¿Hay alguna manera de iniciar un método en C# si se presiona una tecla? Por ejemplo, Esc?Presione la tecla Escape para llamar al método

+3

usando que? ¿Consola? ¿Formar? ASP.NET? – Gregoire

+0

estoy usando formularios – raimis

+0

Tenga en cuenta que si su formulario tiene un ['CancelButton'] (http://msdn.microsoft.com/library/system.windows.forms.form.cancelbutton.aspx) configurado, a continuación, presionando ** ESC ** hará clic automáticamente en este botón. Dependiendo de sus requisitos, este puede ser un buen enfoque. –

Respuesta

3

Estoy escribiendo la aplicación WinForms. Usuario rellena el cuadro de texto y si quiere eliminar todo, él simplemente hace clic ESC en el teclado

Creo que se necesita para manejar the KeyDown event.

+2

También querrá establecer la propiedad del formulario 'KeyPreview' en ** True ** para capturar eventos de KeyPress – whiteshooz

1

¿Está escribiendo una aplicación de consola, una aplicación de WinForms u otra cosa? ¿Está tratando de capturar la clave ESC en todo momento (independientemente de la ventana/aplicación enfocada) u otra cosa?

Más contexto necesario.

Si estás escribiendo una aplicación de consola, entonces debería empezar a ver cosas como Console.ReadKey ...

http://msdn.microsoft.com/en-us/library/system.console.readkey.aspx

+0

Estoy escribiendo la aplicación WinForms. El usuario llena el cuadro de texto y si quiere borrarlo todo, simplemente hace clic en la tecla esc en el teclado – raimis

19

utilizar el evento OnKeyPress de su cuadro de texto y en caso

if(e.KeyCode==Keys.Escape) 
{ 
    yourTextBox.Text = string.Empty; 
} 
+5

gracioso, esto no parece funcionar del todo, ¿y tiene cinco votos al alza? 'private void Form1_KeyDown (remitente del objeto, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) {...' Esto funciona. Pero e.KeyChar es un tipo de carácter, Keys.Escape no lo es y el operador == no se puede aplicar. –

+0

@MasterPeter de hecho, era KeyCode ... – Gregoire

+5

para trabajar con este código necesita Form.KeyPreview = true; –

11

Como han mencionado otros, maneje el evento KeyDown o KeyUp del control apropiado. El evento KeyPress funcionaría para la tecla de Escape así, a pesar de que no se disparará para algunas teclas, como Shift,Ctrl o ALt.

Si desea ejecutar esta función cada vez que el usuario presione la tecla Escape, entonces es probable que desee manejar el evento en el formulario. Si hace esto, probablemente también quiera establecer la propiedad KeyPreview del Formulario en verdadero. Esto permitirá que el control de Formulario reciba el evento incluso si el foco está actualmente dentro de uno de los controles secundarios.

Si desea que el comportamiento sea específico para un control, tales como la limpieza del texto dentro de un cuadro de texto que está seleccionado actualmente, entonces usted debe controlar el evento KeyDown o KeyUp del control TextBox. De esta forma, su controlador de eventos no se activará si el usuario presiona la tecla de escape fuera del cuadro de texto.

En algunas situaciones, es posible que desee evitar que los controles secundarios manejen el mismo evento que acaba de manejar. Puede utilizar la propiedad SuppressKeyPress en la clase KeyEventArgs para controlar este comportamiento:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Escape) 
    { 
     MessageBox.Show("Escape key pressed"); 

     // prevent child controls from handling this event as well 
     e.SuppressKeyPress = true; 
    } 
} 
+1

¡Gracias por la útil sugerencia para KeyPreview! – Peopleware

2

debe de cambiar la forma de propiedad "TeclaDePresentaciónPreliminar" true o no se disparará sus eventos. Manejar estos eventos solo no hará nada, aunque los eventos sean correctos. Te parecerá que realmente no pasa nada aunque hayas suscrito los controladores de eventos adecuados.

0

Con evento KeyPress ...

//Escape 
    if (e.KeyChar == '') 
    { 
      this.DialogResult = DialogResult.Cancel; 
      e.Handled = true; 
    } 
+5

'(char) Keys.Escape' es lo mismo que' '\ x1B'' es lo mismo que '(char) 27' pero ** no es lo mismo que **'' '' – xmojmr

0

También puede utilizar el evento KeyUp. Yo lo prefiero sin embargo.

private void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) { 
    if (e.Key == Key.Escape) { 
     //WHAT WILL HAPPEN INSERT HERE 
    } 
} 
1

Primero en propiedades no> TeclaDePresentaciónPreliminar: True

continuación:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Escape) 
     { 
      //call your method here 
     } 
    } 
2

En caso de que alguien estaba buscando la forma de hacerlo en una aplicación consola

if (Console.ReadKey().Key == ConsoleKey.Escape) 
{ 
    return; 
} 
Cuestiones relacionadas