Partager via


Fonctionnement de l'entrée au clavier

Windows Forms traite les entrées au clavier en déclenchant des événements de clavier en réponse à des messages Windows. La plupart des applications Windows Forms traitent exclusivement les entrées au clavier en gérant les événements de clavier. Toutefois, vous devez comprendre comment les messages de clavier fonctionnent pour pouvoir implémenter des scénarios d'entrée au clavier plus avancés, comme intercepter des touches avant qu'elles n'atteignent un contrôle. Cette rubrique décrit les types de données clés que Windows Forms reconnaît et présente le routage des messages de clavier. Pour plus d'informations sur les événements de clavier, consultez Utilisation des événements du clavier.

Types de touches

Windows Forms identifie les entrées au clavier comme des codes de touche virtuels qui sont représentés par l'énumération Keys de bits. Avec l'énumération Keys, vous pouvez combiner une série de touches enfoncées pour produire une valeur unique. Ces valeurs correspondent aux valeurs qui accompagnent les messages Windows WM_KEYDOWN et WM_SYSKEYDOWN. Vous pouvez détecter la plupart des enfoncements de touche physiques à l'aide des événements KeyDown ou KeyUp. Les touches de caractère sont un sous-ensemble de l'énumération Keys et correspondent aux valeurs qui accompagnent les messages Windows WM_CHAR et WM_SYSCHAR. Si la combinaison de touches enfoncées produit un caractère, vous pouvez détecter le caractère en gérant l'événement KeyPress. Vous pouvez également utiliser Keyboard, exposé par l'interface de programmation Visual Basic, pour découvrir quelles touches ont été enfoncées et envoyer les touches. Pour plus d'informations, consultez Accès au clavier (Visual Basic).

Ordre des événements de clavier

Comme précédemment répertorié, trois événements de clavier apparentés peuvent se produire sur un contrôle. La séquence suivante affiche l'ordre général des événements :

  1. L'utilisateur enfonce la touche "a", la touche est prétraitée, distribuée et un événement KeyDown se produit.

  2. L'utilisateur maintient la touche "a" enfoncée, la touche est prétraitée, distribuée et un événement KeyPress se produit.

    Cet événement se produit plusieurs fois, tant que l'utilisateur maintient une touche enfoncée.

  3. L'utilisateur relâche la touche "a", la touche est prétraitée, distribuée et un événement KeyUp se produit.

Prétraitement des touches

Comme d'autres messages, les messages de clavier sont traités dans la méthode WndProc d'un formulaire ou d'un contrôle. Toutefois, avant que les messages de clavier soient traités, la méthode PreProcessMessage appelle une ou plusieurs méthodes qui peuvent être substituées pour gérer des touches de caractère spécial et des touches physiques. Vous pouvez substituer ces méthodes pour détecter et filtrer certaines touches avant que les messages soient traités par le contrôle. Le tableau suivant montre l'action qui est exécutée et la méthode associée qui se produit, dans l'ordre dans lequel a lieu la méthode.

Prétraitement d'un événement KeyDown

Action

Méthode connexe

Remarques

Recherchez une touche de commande comme un accélérateur ou un raccourci de menu.

ProcessCmdKey

Cette méthode traite une touche de commande, qui a priorité sur les touches normales. Si cette méthode retourne true, le message de la touche n'est pas distribué et un événement de touche ne se produit pas. S'il retourne false, IsInputKey est appelé .

Recherchez une touche spéciale nécessitant un prétraitement ou un caractère normal qui doit déclencher un événement KeyDown et être distribué vers un contrôle.

IsInputKey

Si la méthode retourne true, cela signifie que le contrôle est un caractère normal et un événement KeyDown est déclenché. Si la méthode retourne false, ProcessDialogKey est appelé.

RemarqueRemarque
Pour veiller à ce qu'un contrôle obtienne une touche ou une combinaison de touches, vous pouvez gérer l'événement PreviewKeyDown et donner la valeur true à IsInputKey du PreviewKeyDownEventArgs pour la ou les touches que vous souhaitez.

Recherchez une touche de navigation (échap, TAB, Retour ou les touches de direction).

ProcessDialogKey

Cette méthode traite une touche physique qui emploie une fonctionnalité spéciale dans le contrôle, comme alterner le focus entre le contrôle et son parent. Si le contrôle immédiat ne gère pas la touche, le ProcessDialogKey est appelé le contrôle parent et ainsi de suite jusqu'au contrôle le plus élevé dans la hiérarchie. Si cette méthode retourne true, le prétraitement est terminé et un événement de touche n'est pas généré. Si elle retourne false, un événement KeyDown se produit.

Prétraitement d'un événement KeyPress

Action

Méthode connexe

Remarques

Vérifiez si la touche est un caractère normal devant être traité par le contrôle

IsInputChar

Si le caractère est un caractère normal, cette méthode retourne true, l'événement KeyPress est déclenché et plus aucune tâche de prétraitement ne se produit. Sinon, ProcessDialogChar sera appelé.

Vérifiez si le caractère est un mnémonique (tel que &OK sur un bouton)

ProcessDialogChar

Cette méthode, semblable à ProcessDialogKey, sera appelée sur la hiérarchie de contrôle. Si le contrôle est un contrôle conteneur, il recherche les mnémoniques en appelant ProcessMnemonic sur lui-même et ses contrôles enfants. Si ProcessDialogChar retourne true, un événement KeyPress ne se produit pas.

Traitement de messages de clavier

Lorsque les messages de clavier atteignent la méthode WndProc d'un formulaire ou d'un contrôle, ils sont traités par un jeu de méthodes qui peuvent être substituées. Chacune de ces méthodes retourne une valeur Boolean qui spécifie si le message de clavier a été traité et consommé par le contrôle. Si l'une des méthodes retourne true, le message est considéré comme géré, et n'est pas passé à la base ou au parent du contrôle pour traitement ultérieur. Sinon, le message reste dans la file d'attente et peut être traité dans une autre méthode dans la base ou le parent du contrôle. Le tableau suivant présente les méthodes qui traitent des messages de clavier.

Méthode

Remarques

ProcessKeyMessage

Cette méthode traite tous les messages de clavier qui sont reçus par la méthode WndProc du contrôle.

ProcessKeyPreview

Cette méthode envoie le message de clavier au parent du contrôle. Si ProcessKeyPreview retourne true, aucun événement de touche n'est généré, sinon ProcessKeyEventArgs est appelé.

ProcessKeyEventArgs

Cette méthode déclenche les événements KeyDown, KeyPress et KeyUp, selon les circonstances.

Substitution des méthodes de clavier

Il existe de nombreuses méthodes pouvant être substituées pendant le prétraitement et le traitement d'un message de clavier. Toutefois, certaines méthodes constituent de meilleurs choix que d'autres. Le tableau suivant présente les tâches que vous pouvez souhaiter accomplir et la meilleure manière de substituer les méthodes de clavier. Pour plus d'informations sur la substitution de méthodes, consultez Overriding Properties and Methods.

Tâche

Méthode

Intercepter une touche de navigation et déclencher un événement KeyDown. Par exemple, vous souhaitez que TAB et Retour soient gérées dans une zone de texte.

Override IsInputKey.

RemarqueRemarque
Vous pouvez également gérer l'événement PreviewKeyDown et définir IsInputKey de PreviewKeyDownEventArgs sur true pour la ou les touches que vous souhaitez.

Gérer une entrée ou une navigation spéciale sur un contrôle. Par exemple, vous souhaitez l'utilisation de touches de direction dans votre contrôle List pour modifier l'élément sélectionné.

Override ProcessDialogKey.

Intercepter une touche de navigation et déclencher un événement KeyPress. Par exemple dans un contrôle de zone de sélection numérique, vous souhaitez qu'une touche de direction soit enfoncée plusieurs fois pour accélérer la progression à travers les éléments.

Override IsInputChar.

Gérer une entrée ou une navigation spéciale sur un contrôle pendant un événement KeyPress. Par exemple, dans un contrôle List, maintenir enfoncée la touche "r" permet de passer d'un élément commençant par la lettre r au suivant.

Override ProcessDialogChar.

Exécuter une gestion personnalisée des mnémoniques ; par exemple, vous souhaitez gérer les mnémoniques sur des boutons owner-drawn contenus dans une barre d'outils.

Override ProcessMnemonic.

Voir aussi

Référence

Keys

WndProc

PreProcessMessage

Concepts

Accès au clavier (Visual Basic)

Utilisation des événements du clavier

Autres ressources

My.Computer.Keyboard Object