Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans Windows Forms, l’entrée utilisateur est envoyée aux applications sous la forme de messages Windows . Une série de méthodes substituables traite ces messages au niveau de l’application, du formulaire et du contrôle. Lorsque ces méthodes reçoivent des messages clavier, elles déclenchent des événements qui peuvent être gérés pour obtenir des informations sur l’entrée du clavier. Dans de nombreux cas, les applications Windows Forms peuvent traiter toutes les entrées utilisateur simplement en gérant ces événements. Dans d’autres cas, une application peut avoir besoin de remplacer l’une des méthodes qui traitent les messages afin d’intercepter un message particulier avant qu’il ne soit reçu par l’application, le formulaire ou le contrôle.
Événements de clavier
Tous les contrôles Windows Forms héritent d’un ensemble d’événements liés à l’entrée de la souris et du clavier. Par exemple, un contrôle peut gérer l’événement KeyPress pour déterminer le code de caractère d’une touche qui a été enfoncée. Pour plus d’informations, consultez Utiliser des événements de clavier.
Méthodes qui traitent les messages d’entrée utilisateur
Les formulaires et les contrôles ont accès à l’interface IMessageFilter et à un ensemble de méthodes substituables qui traitent les messages Windows à différents points de la file d’attente des messages. Ces méthodes ont tous un paramètre Message, qui encapsule les détails de bas niveau des messages Windows. Vous pouvez implémenter ou remplacer ces méthodes pour examiner le message, puis consommer le message ou le transmettre au consommateur suivant dans la file d’attente de messages. Le tableau suivant présente les méthodes qui traitent tous les messages Windows dans Windows Forms.
| Méthode | Remarques |
|---|---|
| PreFilterMessage | Cette méthode intercepte les messages Windows mis en file d’attente (également appelés « publiés ») au niveau de l’application. |
| PreProcessMessage | Cette méthode intercepte les messages Windows au niveau du formulaire et du contrôle avant qu’ils n’aient été traités. |
| WndProc | Cette méthode traite les messages Windows au niveau du formulaire et du contrôle. |
| DefWndProc | Cette méthode effectue le traitement par défaut des messages Windows au niveau du formulaire et du contrôle. Cela fournit les fonctionnalités minimales d’une fenêtre. |
| OnNotifyMessage | Cette méthode intercepte les messages au niveau du formulaire et du contrôle, une fois qu’elles ont été traitées. Le bit de style EnableNotifyMessage doit être défini pour que cette méthode soit appelée. |
Les messages clavier et souris sont traités par un ensemble supplémentaire de méthodes substituables spécifiques à ces types de messages. Pour plus d’informations, consultez la section Des clés de prétraitement .
Types de clés
Windows Forms identifie l’entrée au clavier en tant que codes de touche virtuelle représentés par l’énumération binaire Keys. 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 WM_KEYDOWN et WM_SYSKEYDOWN Windows. Vous pouvez détecter la plupart des pressions de touches physiques en gérant les événements KeyDown ou KeyUp. 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ée par l’interface de programmation Visual Basic, pour découvrir les touches qui ont été enfoncées et envoyer des clés. Pour plus d’informations, consultez Accès au clavier (Visual Basic).
Ordre des événements de clavier
Comme indiqué précédemment, trois événements liés au clavier peuvent se produire sur un contrôle. La séquence suivante montre l’ordre général des événements :
- L’utilisateur pousse la touche A, la touche est prétraitée, distribuée, et un événement KeyDown se produit. Si la clé produit un caractère, un KeyPress événement se produit également.
- L'utilisateur maintient la touche A enfoncée—les événements KeyDown et KeyPress se produisent à plusieurs reprises à la fréquence de répétition définie par le système d'exploitation.
- 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 méthode WndProc d’un formulaire ou d’un contrôle. Toutefois, avant le traitement des messages clavier, la méthode PreProcessMessage 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 remplacer ces méthodes pour détecter et filtrer certaines clés avant que le contrôle traite les messages. Le tableau suivant montre l’action en cours d’exécution et la méthode associée qui se produit, dans l’ordre dans lequel la méthode se produit.
Prétraitement d’un événement KeyDown
| Action | Méthode associée | Remarques |
|---|---|---|
| Rechercher une touche de commande comme un accélérateur ou un raccourci du menu. | ProcessCmdKey | Cette méthode traite une clé de commande, qui est prioritaire sur les clés régulières. Si cette méthode retourne true, le message de clé n’est pas distribué et un événement de clé ne se produit pas. Si elle retourne false, IsInputKey est appelée. |
| Vérifier s’il s’agit d’une touche spéciale nécessitant un prétraitement, ou d’une touche de caractère normale devant déclencher un événement KeyDown et être transmise à un contrôle. | IsInputKey | Si la méthode renvoie true, cela signifie que le contrôle est un caractère normal et qu’un événement KeyDown est déclenché. Si la valeur est false, la méthode ProcessDialogKey est appelée.
Remarque : Pour vous assurer qu’un contrôle obtient une clé ou une combinaison de clés, vous pouvez gérer l’événement PreviewKeyDown et définir IsInputKey de l'PreviewKeyDownEventArgs sur true pour la clé ou les 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 touche, ProcessDialogKey est appelé sur le contrôle parent, et ainsi de suite jusqu’au contrôle le plus haut de la hiérarchie. Si cette méthode retourne true, le prétraitement est terminé et un événement clé n’est pas généré. S’il renvoie false, un événement KeyDown se produit. |
Prétraitement d’un événement KeyPress
| Action | Méthode associée | Remarques |
|---|---|---|
| Vérifier que la clé 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 est appelée. |
| Vérifier si le caractère est un caractère mnémonique (comme &OK sur un bouton) | ProcessDialogChar | Cette méthode, qui est similaire à ProcessDialogKey, est appelée dans la hiérarchie de contrôle. Si le contrôle est un contrôle conteneur, il vérifie les mnémoniques en appelant ProcessMnemonic sur lui-même et sur ses contrôles enfants. Si ProcessDialogChar retourne true, un événement KeyPress ne se produit pas. |
Traitement des messages 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 valeur Boolean spécifiant si le message 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 il n’est pas passé à 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 clavier.
| Méthode | Remarques |
|---|---|
| ProcessKeyMessage | Cette méthode traite tous les messages clavier 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 clé n’est généré, sinon ProcessKeyEventArgs est appelé. |
| ProcessKeyEventArgs | Cette méthode déclenche les événements KeyDown, KeyPresset KeyUp, 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 les tâches que vous souhaiterez peut-être accomplir et la meilleure façon de remplacer les méthodes de clavier. Pour plus d’informations sur la substitution de méthodes, consultez Héritage (Guide de programmation C#) ou Héritage (Visual Basic)
| Tâche | Méthode |
|---|---|
| Interceptez une touche de navigation et déclenchez un événement KeyDown. Par exemple, vous souhaitez que Tab et Entrée soient gérés dans une zone de texte. | Remplacez IsInputKey. Vous pouvez également gérer l’événement PreviewKeyDown et définir la propriété IsInputKey de PreviewKeyDownEventArgs sur true pour la ou les touches souhaitées. |
| Effectuer une entrée spéciale ou une gestion de navigation sur un contrôle. Par exemple, vous souhaitez utiliser des touches de direction dans votre contrôle de liste pour modifier l’élément sélectionné. | Substituer la méthode ProcessDialogKey |
| Interceptez une touche de navigation et déclenchez un événement KeyPress. 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 d’entrée ou de navigation lors d’un événement KeyPress. Par exemple, dans un contrôle de liste, maintenir enfoncée la touche R fait défiler entre les éléments qui commencent par la lettre r. | Substituer la méthode ProcessDialogChar |
| Effectuer une gestion mnémonique personnalisée ; par exemple, vous souhaitez gérer les mnémoniques sur des boutons dessinés par l'application contenus dans une barre d’outils. | Remplacez ProcessMnemonic. |
Voir aussi
- Keys
- WndProc
- PreProcessMessage
- Utilisation des événements de clavier
- Comment modifier les événements de touches du clavier
- Comment vérifier les appuis sur les touches de modification
- Comment simuler des événements de clavier
- Comment gérer les messages d’entrée au clavier dans le formulaire
- Ajouter un contrôle
.NET Desktop feedback