Fonctionnement de l'entrée au clavier

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

Types de touches

Windows Forms identifie l’entrée du clavier en tant que codes de touche virtuelle représentés par l’énumération au niveau Keys du bit. Avec l’énumération Keys , vous pouvez combiner une série de touches enfoncées pour générer 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 pressions de touches physiques en gérant les événements ou KeyUp les KeyDown événements. Les clés de caractères sont un sous-ensemble de l’énumération Keys et correspondent aux valeurs qui accompagnent les messages WM_CHAR et WM_SYSCHAR Windows. Si la combinaison de touches enfoncées entraîne 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 envoyées. Pour plus d’informations, consultez Accès au clavier.

Ordre des événements de clavier

Comme indiqué précédemment, il existe 3 événements liés au clavier qui peuvent se produire sur un contrôle. La séquence suivante montre l’ordre général des événements :

  1. L’utilisateur envoie (push) la clé « a », la clé est prétraite, distribuée et un KeyDown événement se produit.

  2. L’utilisateur contient la clé « a », la clé est prétraite, distribuée et un KeyPress événement se produit.

    Cet événement se produit plusieurs fois lorsque l’utilisateur maintient une touche enfoncée.

  3. L’utilisateur libère la clé « a », la clé est prétraite, distribuée et un KeyUp événement se produit.

Prétraitement des touches

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

Prétraitement d’un événement KeyDown

Action Méthode associée Notes
Rechercher une touche de commande comme un accélérateur ou un raccourci du menu. ProcessCmdKey Cette méthode traite une touche de commande, qui est prioritaire par rapport aux touches ordinaires. Si cette méthode renvoie true, le message de la touche n’est pas distribué et aucun événement de touche ne se produit. Si elle retourne false, IsInputKey est appelée.
Recherchez une clé spéciale qui nécessite un prétraitement ou une clé de caractère normale qui doit déclencher un KeyDown événement et être distribuée à un contrôle. IsInputKey Si la méthode retourne true, cela signifie que le contrôle est un caractère normal et qu’un KeyDown événement est déclenché. Si false, ProcessDialogKey est appelé. Remarque : Pour vous assurer qu’un contrôle obtient une clé ou une combinaison de clés, vous pouvez gérer l’événement et définir IsInputKey la PreviewKeyDown valeur de true la PreviewKeyDownEventArgs clé ou des clés souhaitées.
Rechercher une touche de navigation (touches ÉCHAP, de tabulation, de retour ou de direction). ProcessDialogKey Cette méthode traite une touche physique qui emploie une fonctionnalité spéciale dans le contrôle, comme basculer l’objectif entre le contrôle et son parent. Si le contrôle immédiat ne gère pas la clé, il ProcessDialogKey est appelé sur le contrôle parent, et ainsi de suite sur le contrôle le plus haut de la hiérarchie. Si cette méthode renvoie true, le prétraitement est terminé et un événement de touche n’est pas généré. Si elle retourne false, un KeyDown événement se produit.

Prétraitement d’un événement KeyPress

Action Méthode associée Notes
Vérifier si la touche est un caractère normal qui doit ê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 aucun prétraitement supplémentaire ne se produit. Sinon ProcessDialogChar , on appellera.
Vérifier si le caractère est un caractère mnémonique (comme &OK sur un bouton) ProcessDialogChar Cette méthode, similaire à ProcessDialogKeycelle du contrôle, sera appelée dans la hiérarchie de contrôle. Si le contrôle est un contrôle conteneur, il case activée pour les mnémoniques en appelant ProcessMnemonic lui-même et ses contrôles enfants. Si ProcessDialogChar cette propriété est retournée true, un KeyPress événement ne se produit pas.

Traitement des messages de clavier

Une fois que les messages clavier atteignent la WndProc méthode d’un formulaire ou d’un contrôle, ils sont traités par un ensemble de méthodes qui peuvent être substituées. Chacune de ces méthodes retourne une Boolean valeur spécifiant si le message clavier a été traité et consommé par le contrôle. Si l’une des méthodes renvoie true, alors le message est considéré comme traité et n’est pas transmis à la base ou au parent du contrôle pour un traitement ultérieur. Dans le cas contraire, le message reste dans la file d’attente des messages et peut être traité dans une autre méthode de la base ou du parent du contrôle. Le tableau suivant présente les méthodes qui traitent les messages de clavier.

Méthode Notes
ProcessKeyMessage Cette méthode traite tous les messages clavier reçus par la WndProc méthode du contrôle.
ProcessKeyPreview Cette méthode envoie le message de clavier au parent du contrôle. Si ProcessKeyPreview cette propriété est retournée true, aucun événement de clé n’est généré ; sinon ProcessKeyEventArgs , il est appelé.
ProcessKeyEventArgs Cette méthode déclenche le KeyDown, KeyPresset KeyUp les événements, le cas échéant.

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 sont mieux adaptées que d’autres. Le tableau suivant présente des tâches que vous voulez peut-être accomplir et la meilleure façon de substituer les méthodes de clavier. Pour plus d’informations sur la substitution de méthodes, consultez Propriétés et méthodes de substitution dans les classes dérivées.

Tâche Méthode
Interceptez une clé de navigation et déclenchez un KeyDown événement. Par exemple, vous souhaitez que la touche de tabulation et la touche de retour soient gérées dans une zone de texte. Remplacez IsInputKey. Remarque : Vous pouvez également gérer l’événement PreviewKeyDown et définir IsInputKey la valeur de true la PreviewKeyDownEventArgs clé ou des clés souhaitées.
Effectuer une entrée spéciale ou une gestion de navigation sur un contrôle. Par exemple, vous souhaitez utiliser les touches de direction dans votre contrôle de liste pour modifier l’élément sélectionné. Substituer la méthode ProcessDialogKey
Interceptez une clé de navigation et déclenchez un KeyPress événement. Par exemple, dans un contrôle de zone de sélection, vous voulez que des activations multiples de la touche de direction accélèrent la progression au sein des éléments. Remplacez IsInputChar.
Effectuez une gestion spéciale de l’entrée ou de la navigation pendant un KeyPress événement. Par exemple, dans une liste de contrôle, le fait de maintenir la touche « r » enfoncée permet d’ignorer les éléments qui commencent par la lettre r. Substituer la méthode ProcessDialogChar
Effectuer une gestion personnalisée des caractères mnémoniques ; par exemple, vous souhaitez gérer les caractères mnémoniques sur des boutons owner-drawn contenus dans une barre d’outils. Remplacez ProcessMnemonic.

Voir aussi