2010-12-08 3 views
2

Je dois répondre aux événements de clavier (touches O, C, G, etc., pas de touches de modification) pendant qu'une opération Drag + Drop est en cours sur mon contrôle (c'est-à-dire entre DragEnter et DragLeave). Cependant, l'événement KeyDown n'est pas appelé à ce stade.Gérer KeyDown pendant une glissade

J'ai essayé de sélectionner mon contrôle et de régler spécifiquement le focus sur DragEnter, mais cela ne fonctionne pas.

EDIT:

Hans réponse est fondamentalement correcte, sauf que je devais utiliser GetAsynchKeyState pour obtenir le comportement que je voulais.

Répondre

3

L'événement QueryContinueDrag est déclenché par glisser source. La vérification de l'état des clés qui vous intéressent nécessitera pinvoke, l'événement est uniquement conçu pour aider à reconnaître la clé d'échappement et les changements d'état des touches de modification. Ce qui est quelque chose à garder à l'esprit, que ces touches ont une action spéciale est très indétectable. Il renvoie une valeur < 0 lorsque la touche est enfoncée Je ne peux pas dire que c'est garanti pour fonctionner correctement mais ça a l'air bien quand je l'ai essayé.

+1

Merci Hans, il le fera. Pas de soucis de découvrabilité, des informations supplémentaires concernant les raccourcis clavier seront dessinées dans le contrôle lors des opérations de glisser. –

2

Vous pouvez également essayer: méthode Keyboard.IsKeyDown(); pour vérifier si une touche spécifique est choisie, à savoir:

bool isKeyPressed = Keyboard.IsKeyDown(Key.LeftAlt); 

Il est similaire à la réponse précédente, mais il est une méthode .NET native, il ne vous obliger à importer des fonctions.

Une question similaire a été posée ici: Handle KeyDown during a drag drop. Or keydown event not workign, mais il a été suggéré de la faire fonctionner comme un événement.

MISE À JOUR

La première solution semble fonctionner que dans WPF. Si vous voulez vérifier les états des touches de modification, il existe cependant une méthode utilisant une propriété Form.ModifierKeys qui devrait fonctionner correctement dans WinForms. L'exemple montre comment vérifier si alt (alt gauche) et touches Ctrl sont à la fois pressé:

if (Form.ModifierKeys == (Keys.Alt | Keys.Control)) 
{ 
    //TODO: insert your code here 
} 
+0

Bon conseil, mais WPF est maintenant autorisé. Je dois m'en tenir aux winforms seulement. –

+0

Oh, désolé, je ne l'ai pas remarqué. Cependant, j'ai trouvé une autre méthode de le faire pour les touches de modification qui devraient fonctionner correclty en utilisant WinForms. –