Ввод с клавиатуры c windows form

Общие сведения об использовании клавиатуры (Windows Forms .NET) Overview of using the keyboard (Windows Forms .NET)

В Windows Forms вводимые пользователем данные отправляются в приложения в виде сообщений Windows. In Windows Forms, user input is sent to applications in the form of Windows messages. Ряд переопределяемых методов обрабатывает эти сообщения на уровне приложения, формы и элемента управления. A series of overridable methods process these messages at the application, form, and control level. Когда эти методы получают сообщения клавиатуры, они вызывают события, которые могут быть обработаны для получения сведений о вводе с помощью клавиатуры. When these methods receive keyboard messages, they raise events that can be handled to get information about the keyboard input. Во многих случаях приложения Windows Forms способны обрабатывать все вводимые пользователем данные, просто обрабатывая эти события. In many cases, Windows Forms applications will be able to process all user input simply by handling these events. В других случаях может потребоваться переопределить в приложении один из методов, обрабатывающих сообщения, чтобы перехватить конкретное сообщение, прежде чем оно будет получено приложением, формой или элементом управления. In other cases, an application may need to override one of the methods that process messages in order to intercept a particular message before it is received by the application, form, or control.

Документация для Руководства по рабочему столу по .NET 5 (и .NET Core) находится в разработке. The Desktop Guide documentation for .NET 5 (and .NET Core) is under construction.

События клавиатуры Keyboard events

Все элементы управления Windows Forms наследуют набор событий, связанных с вводом с помощью мыши и клавиатуры. All Windows Forms controls inherit a set of events related to mouse and keyboard input. Например, элемент управления может обработать событие KeyPress, чтобы определить код символа нажатой клавиши. For example, a control can handle the KeyPress event to determine the character code of a key that was pressed. Дополнительные сведения см. в разделе об использовании событий клавиатуры. For more information, see Using keyboard events.

Методы, обрабатывающие сообщения ввода пользователя Methods that process user input messages

Формы и элементы управления имеют доступ к интерфейсу IMessageFilter и набору переопределяемых методов, которые обрабатывают сообщения Windows в различных точках очереди сообщений. Forms and controls have access to the IMessageFilter interface and a set of overridable methods that process Windows messages at different points in the message queue. Все эти методы имеют параметр Message, который инкапсулирует низкоуровневые сведения о сообщениях Windows. These methods all have a Message parameter, which encapsulates the low-level details of Windows messages. Можно реализовать или переопределить эти методы, чтобы проанализировать сообщение, а затем либо использовать сообщение, либо передать его следующему потребителю в очереди сообщений. You can implement or override these methods to examine the message and then either consume the message or pass it on to the next consumer in the message queue. В следующей таблице представлены методы, обрабатывающие все сообщения Windows в Windows Forms. The following table presents the methods that process all Windows messages in Windows Forms.

Метод Method Примечания Notes
PreFilterMessage Метод перехватывает сообщения в очереди (также известные как отправленные сообщения) на уровне приложения. This method intercepts queued (also known as posted) Windows messages at the application level.
PreProcessMessage Метод перехватывает сообщения Windows на уровне формы и элемента управления до их обработки. This method intercepts Windows messages at the form and control level before they have been processed.
WndProc Метод обрабатывает сообщения Windows на уровне формы и элемента управления. This method processes Windows messages at the form and control level.
DefWndProc Метод выполняет обработку сообщений Windows по умолчанию на уровне формы и элемента управления. This method performs the default processing of Windows messages at the form and control level. Это обеспечивает минимальную функциональность окна. This provides the minimal functionality of a window.
OnNotifyMessage Метод перехватывает сообщения на уровне формы и элемента управления после их обработки. This method intercepts messages at the form and control level, after they have been processed. Для вызова этого метода необходимо задать бит стиля EnableNotifyMessage. The EnableNotifyMessage style bit must be set for this method to be called.

Сообщения клавиатуры и мыши также обрабатываются дополнительным набором переопределяемых методов, характерных для этих типов сообщений. Keyboard and mouse messages are also processed by an additional set of overridable methods that are specific to those types of messages. Дополнительные сведения см. в разделе о предварительной обработке ключей. For more information, see the Preprocessing keys section. . .

Типы ключей Types of keys

Windows Forms идентифицирует ввод с клавиатуры как коды виртуальных клавиш, представляемые побитовым перечислением Keys. Windows Forms identifies keyboard input as virtual-key codes that are represented by the bitwise Keys enumeration. Перечисление Keys позволяет объединять несколько нажатых клавиш в виде одиночного значения. With the Keys enumeration, you can combine a series of pressed keys to result in a single value. Эти значения соответствуют значениям, сопровождающим сообщения Windows WM_KEYDOWN и WM_SYSKEYDOWN. These values correspond to the values that accompany the WM_KEYDOWN and WM_SYSKEYDOWN Windows messages. Большинство физических нажатий клавиш можно обнаружить, обрабатывая события KeyDown или KeyUp. You can detect most physical key presses by handling the KeyDown or KeyUp events. Клавиши знаков являются подмножеством перечисления Keys и соответствуют значениям, сопровождающим сообщения Windows WM_CHAR и WM_SYSCHAR. Character keys are a subset of the Keys enumeration and correspond to the values that accompany the WM_CHAR and WM_SYSCHAR Windows messages. Если сочетание нажатых клавиш образует знак, его можно обнаружить путем обработки события KeyPress. If the combination of pressed keys results in a character, you can detect the character by handling the KeyPress event. , exposed by Visual Basic programming interface, to discover which keys were pressed and send keys. For more information, see [Accessing the Keyboard](../../visual-basic/developing-apps/programming/computer-resources/accessing-the-keyboard.md).—>

Порядок событий клавиатуры Order of keyboard events

Как было показано ранее, в элементе управления могут возникать 3 связанных с клавиатурой события. As listed previously, there are 3 keyboard related events that can occur on a control. Общий порядок событий показывает следующая последовательность: The following sequence shows the general order of the events:

  1. Пользователь нажимает клавишу «a». Она предварительно обрабатывается, подготавливается к отправке, и происходит событие KeyDown. The user pushes the «a» key, the key is preprocessed, dispatched, and a KeyDown event occurs.
  2. Пользователь удерживает нажатой клавишу «a». Она предварительно обрабатывается, подготавливается к отправке, и происходит событие KeyPress. The user holds the «a» key, the key is preprocessed, dispatched, and a KeyPress event occurs. Пока пользователь удерживает нажатой данную клавишу, это событие возникает несколько раз. This event occurs multiple times as the user holds a key.
  3. Пользователь отпускает клавишу «a». Она предварительно обрабатывается, подготавливается к отправке, и происходит событие KeyUp. The user releases the «a» key, the key is preprocessed, dispatched and a KeyUp event occurs.

Предварительная обработка сообщений клавиатуры Preprocessing keys

Как и другие сообщения, обработка сообщений клавиатуры выполняется в методе WndProc формы или элемента управления. Like other messages, keyboard messages are processed in the WndProc method of a form or control. Тем не менее перед обработкой сообщений клавиатуры метод PreProcessMessage вызывает один или несколько методов, которые могут быть переопределены для обработки специальных знаков и физических клавиш. However, before keyboard messages are processed, the PreProcessMessage method calls one or more methods that can be overridden to handle special character keys and physical keys. Эти методы можно переопределить для обнаружения и фильтрации определенных клавиш перед обработкой сообщения элементом управления. You can override these methods to detect and filter certain keys before the messages are processed by the control. В следующей таблице показаны выполняемые действия и связанные методы в порядке их осуществления. The following table shows the action that is being performed and the related method that occurs, in the order that the method occurs.

Предварительная обработка события KeyDown Preprocessing for a KeyDown event

Действие Action Связанный метод Related method Примечания Notes
Проверка клавиши для команд, например ярлыка для сочетаний клавиш или меню. Check for a command key such as an accelerator or menu shortcut. ProcessCmdKey Этот метод обрабатывает клавишу для команд, которая имеет приоритет над обычными клавишами. This method processes a command key, which takes precedence over regular keys. Если этот метод возвращает true , сообщение о нажатии клавиши не отправляется, и событие клавиши не возникает. If this method returns true , the key message is not dispatched and a key event does not occur. Если он возвращает false , вызывается IsInputKey . If it returns false , IsInputKey is called .
Проверка специальной клавиши, для которой требуется предварительная обработка, или обычной клавиши знака, которая должна вызывать событие KeyDown и отправляться в элемент управления. Check for a special key that requires preprocessing or a normal character key that should raise a KeyDown event and be dispatched to a control. IsInputKey Если метод возвращает true , это означает, что элементом управления является обычный символ, и возникает событие KeyDown. If the method returns true , it means the control is a regular character and a KeyDown event is raised. Если значение равно false , вызывается ProcessDialogKey. If false , ProcessDialogKey is called. Примечание. Чтобы элемент управления мог получить события нажатия клавиши или сочетания клавиш, можно выполнить обработку события PreviewKeyDown и установить для поля IsInputKey объекта PreviewKeyDownEventArgs значение true для необходимых клавиш. Note: To ensure a control gets a key or combination of keys, you can handle the PreviewKeyDown event and set IsInputKey of the PreviewKeyDownEventArgs to true for the key or keys you want.
Проверка клавиши навигации (ESC, TAB, ВВОД или клавиши со стрелками). Check for a navigation key (ESC, TAB, Return, or arrow keys). ProcessDialogKey Этот метод обрабатывает физическую клавишу со специальными функциональными возможностями в элементе управления, например переключение фокуса между элементом управления и его родительским объектом. This method processes a physical key that employs special functionality within the control, such as switching focus between the control and its parent. Если непосредственный элемент управления не обрабатывает клавишу, ProcessDialogKey вызывается в родительском элементе управления и так далее, пока не будет достигнут самый верхний элемент управления в иерархии. If the immediate control does not handle the key, the ProcessDialogKey is called on the parent control and so on to the topmost control in the hierarchy. Если этот метод возвращает true , предварительная обработка завершается, и событие клавиатуры не возникает. If this method returns true , preprocessing is complete and a key event is not generated. Если он возвращает false , возникает событие KeyDown. If it returns false , a KeyDown event occurs.

Предварительная обработка события KeyPress Preprocessing for a KeyPress event

Действие Action Связанный метод Related method Примечания Notes
Убедитесь, что клавиша является обычным символом, который должен быть обработан элементом управления Check to see the key is a normal character that should be processed by the control IsInputChar Если это обычный символ, данный метод возвращает true , возникает событие KeyPress, и последующая предварительная обработка не выполняется. If the character is a normal character, this method returns true , the KeyPress event is raised and no further preprocessing occurs. В противном случае будет вызван ProcessDialogChar. Otherwise ProcessDialogChar will be called.
Проверьте, не является ли символ назначенной клавишей (например, &OK на кнопке) Check to see if the character is a mnemonic (such as &OK on a button) ProcessDialogChar Этот метод, аналогичный ProcessDialogKey, вызывается в иерархии элементов управления. This method, similar to ProcessDialogKey, will be called up the control hierarchy. Если элемент управления является контейнерным, он проверяет наличие назначенных клавиш путем вызова ProcessMnemonic в себя самого и свои дочерние элементы управления. If the control is a container control, it checks for mnemonics by calling ProcessMnemonic on itself and its child controls. Если ProcessDialogChar возвращает true , событие KeyPress не происходит. If ProcessDialogChar returns true , a KeyPress event does not occur.

Обработка сообщений клавиатуры Processing keyboard messages

После того как сообщения клавиатуры достигают метода WndProc формы или элемента управления, они обрабатываются набором методов, которые могут быть переопределены. After keyboard messages reach the WndProc method of a form or control, they are processed by a set of methods that can be overridden. Каждый из этих методов возвращает значение Boolean, указывающее, было ли сообщение клавиатуры обработано и использовано элементом управления. Each of these methods returns a Boolean value specifying whether the keyboard message has been processed and consumed by the control. Если один из методов возвращает true , сообщение считается обработанным и не передается в базовый или родительский объект элемента управления для дальнейшей обработки. If one of the methods returns true , then the message is considered handled, and it is not passed to the control’s base or parent for further processing. В противном случае сообщение остается в очереди сообщений и может быть обработано в другом методе в базовом или родительском объекте элемента управления. Otherwise, the message stays in the message queue and may be processed in another method in the control’s base or parent. В следующей таблице представлены методы, обеспечивающие обработку сообщений клавиатуры. The following table presents the methods that process keyboard messages.

Метод Method Примечания Notes
ProcessKeyMessage Этот метод обрабатывает все сообщения клавиатуры, полученные методом WndProc элемента управления. This method processes all keyboard messages that are received by the WndProc method of the control.
ProcessKeyPreview Этот метод отправляет сообщение клавиатуры в родительский объект элемента управления. This method sends the keyboard message to the control’s parent. Если ProcessKeyPreview возвращает true , событие нажатия клавиши не создается, в противном случае вызывается ProcessKeyEventArgs. If ProcessKeyPreview returns true , no key event is generated, otherwise ProcessKeyEventArgs is called.
ProcessKeyEventArgs При необходимости этот метод вызывает события KeyDown, KeyPress или KeyUp. This method raises the KeyDown, KeyPress, and KeyUp events, as appropriate.

Переопределение методов клавиатуры Overriding keyboard methods

Существует множество методов переопределения, когда выполняется предварительная и основная обработка сообщений клавиатуры. Тем не менее некоторые методы отличаются большим удобством. There are many methods available for overriding when a keyboard message is preprocessed and processed; however, some methods are much better choices than others. В таблице ниже приведены задачи, которые может быть необходимо выполнить, и оптимальные способы переопределения методов для сообщений клавиатуры. Following table shows tasks you might want to accomplish and the best way to override the keyboard methods. Дополнительные сведения о переопределении методов см. в разделе Наследование (Руководство по программированию на C#) или Наследование (Visual Basic). For more information on overriding methods, see Inheritance (C# Programming Guide) or Inheritance (Visual Basic)

Читайте также:  Утилита для windows aveiconifier2
Оцените статью