2010-05-23 36 views
10

Quiero capturar las teclas de borrar y no hacer nada cuando se presiona la tecla. ¿Cómo puedo hacer eso en WPF y Windows Forms?Cómo capturar la tecla borrar presionar C#?

+2

¿Qué marco de interfaz de usuario? Winforms? WPF? ...? –

+2

plus ¿en qué contexto? un cuadro de texto, un formulario, etc. – JaSk

+0

@Mehrdad Afshari. Tanto en WPF como en Winforms – thuaso

Respuesta

3

No sé sobre WPF, pero pruebe el evento KeyDown en lugar del evento KeyPress para Winforms.

Consulte el MSDN article en Control.KeyPress, específicamente la frase "El evento KeyPress no se genera mediante claves que no son caracteres, sin embargo, las claves que no son caracteres plantean los eventos KeyDown y KeyUp".

17

Para agregar un controlador de WPF KeyDown:

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Delete) 
    { 
     MessageBox.Show("delete pressed"); 
     e.Handled = true; 
    } 
} 

Cuál es casi el mismo que para Windows Forms:

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Delete) 
    { 
     MessageBox.Show("delete pressed"); 
     e.Handled = true; 
    } 
} 

y no se olvide de convertir en KeyPreview.

Si desea evitar que se ejecuten las acciones predeterminadas de las teclas, configure e.Handled = true como se muestra arriba. Es lo mismo en Windows Forms y WPF

+1

Gracias por responder. ¿Cómo puedo evitar la acción Eliminar? – thuaso

+0

¡Es bueno saberlo! Cómo verificar para ver si se presionó CTRL o SHIFT? – Matt

+1

@Matt - mira 'Keyboard.Modifiers'. – ChrisF

1

simplemente marque el manejador key_press o Key_Down evento en el control específico y comprobar como para WPF:

if (e.Key == Key.Delete) 
{ 
    e.Handle = false; 
} 

para Windows Forms:

if (e.KeyCode == Keys.Delete) 
{ 
    e.Handled = false; 
} 
26

Al usar MVVM con WPF puede capturar presionada por tecla en XAML utilizando enlaces de entrada.

  <ListView.InputBindings> 
       <KeyBinding Command="{Binding COMMANDTORUN}" 
          Key="KEYHERE" /> 
      </ListView.InputBindings> 
+1

Me pregunto por qué esto no generó más votos ascendentes: conceptualmente es una forma mucho más limpia. – Vlad

+0

Acepto Vlad, esta es una forma muy limpia de hacerlo. +1 – Jeff

+0

En algunos componentes puede colocar los enlaces directamente en la definición (no sé si esto es muy común, o una cosa única de Telerik): Jeff

Cuestiones relacionadas