2010-10-12 19 views
0

J'ai une application qui utilise PreviewKeyDown pour capturer CTRLX frappes (où X est une lettre) le long des lignes de:Comment puis-je capturer CTRL-BACKSPACE dans WPF/C#?

Key key = (e.Key == Key.System ? e.SystemKey : e.Key); 
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) { 
    switch (key) { 
     case Key.A: keyStroke = 0x01; break; 
     case Key.B: keyStroke = 0x02; break; 
     : 

parce qu'il ne semble pas être une combinaison de touches pour backspace, Je capture que dans un PreviewTextInput (avec les touches CTRL non afin d'éviter d'essayer de mapper les touches de caractères manuellement):

private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e) { 
    Char ch = e.Text.ToCharArray()[0]; 
    if ((ch >= (Char)0x01) && (ch <= (Char)0x7e)) { 
     // Do something with character. 
    } 
} 

Cependant, je dois être en mesure de capturer l'utilisateur en appuyant sur CTRLBACKSPACE. Je suis à une perte puisque le PreviewKeyDown ne semble pas connaître le retour arrière et l'événement TextCompositionEventArgs ne semble pas porter les keystates (comme ou ALT).

Quelle est la meilleure façon (ou, en effet, toute façon) pour intercepter CTRLBACKSPACE?

+1

PreviewKeyDown détecte backspace pour moi. Si j'ajoute un cas Key.Back à votre instruction switch, il s'appelle comme je m'y attendais. –

+0

OK merci. J'ai ajouté une réponse. Et oui, je suis sûr que la dénomination de cette clé m'a aussi attrapé avant. :) –

Répondre

2

Pour détecter la touche de retour arrière, vous devez utiliser la valeur Key.Back de l'énumération de clé.

Par exemple:

Key key = (e.Key == Key.System ? e.SystemKey : e.Key); 
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) { 
    switch (key) { 
     case Key.A: keyStroke = 0x01; break; 
     case Key.B: keyStroke = 0x02; break; 
     case Key.Back: // Do something 
     break; 
    } 
}