* Migrate inprogress winforms contnet from docs * Fix preview note * Fix vb code * Minor fixes to keyboard articles * Minor adjustment to overview * Test redirects for 4.0 -> 5.0 * adjust links * Add mouse input section winforms (#81) * Update projects to .NET 5 * Update keyboard desc * Finish mouse events * Add remaining mouse articles;code * finish mouse input * minor fixes * Remove branch restriction (#82) * Update build-validation.yml (#84) * Update build-validation.yml (#85) * Fix vb proj * Add WinForms tutorial (#91) * redirect between overview * New create an app tutorial * Fix markdown * Fix preserve view setting * Add forms articles (#93) * Add forms articles * Fix warnings * Winforms publish (#95) * Prep TOC for publish * Updated date * Automatic how-to topic type * Update desc/headers * Fix links * Fix build errors * Add preview note * Update toc landing page * Convert old style project files * update download links * Apply suggestions from code review Co-authored-by: Genevieve Warren <[email protected]> * Adjust number key * Update dotnet-desktop-guide/net/winforms/overview/index.md * Try toc position task via bookmark * Improve images * Remove sentence * File redirects Co-authored-by: Genevieve Warren <[email protected]>
4.0 KiB
title, description, ms.date, dev_langs, helpviewer_keywords
| title | description | ms.date | dev_langs | helpviewer_keywords | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Modify keyboard key events | Learn how to intercept a key press and modify which key is pressed on a Windows Forms .NET application. | 10/26/2020 |
|
|
How to modify keyboard key events (Windows Forms .NET)
Windows Forms provides the ability to consume and modify keyboard input. Consuming a key refers to handling a key within a method or event handler so that other methods and events further down the message queue don't receive the key value. And, modifying a key refers to modifying the value of a key so that methods and event handlers further down the message queue receive a different key value. This article shows how to accomplish these tasks.
[!INCLUDE desktop guide under construction]
Consume a key
In a xref:System.Windows.Forms.Control.KeyPress event handler, set the xref:System.Windows.Forms.KeyPressEventArgs.Handled%2A property of the xref:System.Windows.Forms.KeyPressEventArgs class to true.
-or-
In a xref:System.Windows.Forms.Control.KeyDown event handler, set the xref:System.Windows.Forms.KeyEventArgs.Handled%2A property of the xref:System.Windows.Forms.KeyEventArgs class to true.
Note
Setting the xref:System.Windows.Forms.KeyEventArgs.Handled%2A property in the xref:System.Windows.Forms.Control.KeyDown event handler does not prevent the xref:System.Windows.Forms.Control.KeyPress and xref:System.Windows.Forms.Control.KeyUp events from being raised for the current keystroke. Use the xref:System.Windows.Forms.KeyEventArgs.SuppressKeyPress%2A property for this purpose.
The following example handles the xref:System.Windows.Forms.Control.KeyPress event to consume the A and a character keys. Those keys can't be typed into the text box:
:::code language="csharp" source="snippets/how-to-change-key-press/csharp/Form1.cs" id="ConsumeKey"::: :::code language="vb" source="snippets/how-to-change-key-press/vb/Form1.vb" id="ConsumeKey":::
Modify a standard character key
In a xref:System.Windows.Forms.Control.KeyPress event handler, set the xref:System.Windows.Forms.KeyPressEventArgs.KeyChar%2A property of the xref:System.Windows.Forms.KeyPressEventArgs class to the value of the new character key.
The following example handles the xref:System.Windows.Forms.Control.KeyPress event to change any A and a character keys to !:
:::code language="csharp" source="snippets/how-to-change-key-press/csharp/Form1.cs" id="ModifyKey"::: :::code language="vb" source="snippets/how-to-change-key-press/vb/Form1.vb" id="ModifyKey":::
Modify a non-character key
You can only modify non-character key presses by inheriting from the control and overriding the xref:System.Windows.Forms.Control.PreProcessMessage%2A method. As the input xref:System.Windows.Forms.Message is sent to the control, it's processed before the control raising events. You can intercept these messages to modify or block them.
The following code example demonstrates how to use the xref:System.Windows.Forms.Message.WParam%2A property of the xref:System.Windows.Forms.Message parameter to change the key pressed. This code detects a key from F1 through F10 and translates the key into a numeric key ranging from 0 through 9 (where F10 maps to 0).
:::code language="csharp" source="snippets/how-to-change-key-press/csharp/NewTextBox.cs" id="PreProcessMessage"::: :::code language="vb" source="snippets/how-to-change-key-press/vb/NewTextBox.vb" id="PreProcessMessage":::