2010-03-29 6 views
2

Je ne parviens pas à capturer Ctrl +PageUp combinaison de touches dans un contrôle ListView en application WinForms.C# capture Ctrl + Page touche

J'utilise ce code pour capturer les frappes -

private void ListViewEx_KeyDown(object sender, KeyEventArgs e) 
{ 
... 
if(e.Control){ 
if((e.KeyCode^Keys.Left) == 0) 
    MessageBox.Show("Left"); //shows messagebox 
else if((e.KeyCode^Keys.PageUp) == 0) 
    MessageBox.Show("PageUp"); //does not 
... 
} 

Dois-je plonger dans WndProc pour traiter cette clé? Merci.


Edit: J'ai trouvé que cela fonctionne, le problème était en enfermant TabControl la manipulation de ces clés avant ListControl a pour eux.

+0

En fait, après un examen plus approfondi, votre code fonctionne quand je le teste. Y at-il quelque chose qui se passe dans le code que vous avez omis avant le bloc if qui peut interférer d'une certaine façon? –

+0

non, cela ne fonctionne pas - J'ai un contrôle ListView dérivé, et chaque combinaison de touches fonctionne à l'exception de Ctrl + PageUp ou Ctrl + PageDown. Ces deux continuent à concentrer un autre contrôle dans le formulaire. – Axarydax

+0

Ok, je viens de faire une application de test où tout cela fonctionne, et quand je loue plus loin pour reproduire le problème et ajouté TabControl, j'ai découvert que c'était TabControl qui mangeait mes clés. – Axarydax

Répondre

4

Pas besoin de WndProc:

if ((e.Modifiers & ModifierKeys) == Keys.Control && e.KeyCode == Keys.PageUp) 
{ 
    // ctrl + page up was pressed 
} 
2

chèque

Keys.Control | Keys.PageUp 
+1

Cela ne fonctionnera pas car l'événement 'KeyDown' contient des informations sur la clé qui a déclenché l'événement, pas sur les touches qui sont actuellement pressées. Vous obtiendrez donc deux événements KeyDown distincts: un pour la touche Control et un pour la touche PageUp. –

+1

Cela va fonctionner. –

+0

Cela dépend quand vous exécutez ce code;) – thelost

4

L'argument e.KeyData comprend les touches de modification. Faites-le ressembler à ceci:

if (e.KeyData == (Keys.Control | Keys.PageDown)) { 
    // Do your stuff 
    Console.WriteLine("Ctrl+PgDn"); 
    } 
Questions connexes