Compartilhar via


Como Funciona a Entrada do Teclado

Os Formulários do Windows processam a entrada do teclado gerando eventos do teclado em resposta às mensagens do Windows. A maioria dos aplicativos de Formulários do Windows processam a entrada do teclado exclusivamente manipulando eventos de teclado. No entanto, você precisa entender como as mensagens do teclado funcionam para que você pode implementar cenários mais avançados de entrada do teclado, como interceptar teclas antes que elas alcancem um controle. Este tópico descreve os tipos de dados de teclas que os Formulários do Windows reconhecem e fornece uma visão geral de como as mensagens do teclado são roteadas. Para obter mais informações sobre eventos do teclado, consulte Usando Eventos do Teclado.

Tipos de Teclas

Os Formulários do Windows identificam a entrada do teclado como códigos de tecla virtuais que são representados pela enumeração Keys bit a bit. Com a enumeração Keys, você pode combinar uma série de teclas pressionadas resultando em um único valor. Esses valores correspondem aos valores que acompanham as mensagens do Windows WM_KEYDOWN e WM_SYSKEYDOWN. Você poderá detectar a maior parte dos pressionamentos de teclas físicas pelo tratamento dos eventos KeyDown ou KeyUp. Teclas de caractere são um subconjunto da enumeração Keys e correspondem aos valores que acompanham as mensagens do Windows WM_CHAR e WM_SYSCHAR. Se a combinação de teclas pressionadas resulta em um caractere, você poderá detectar o caractere ao manipular o evento KeyPress. Como alternativa, você pode usar Keyboard, exposto pela interface de programação do Visual Basic, para descobrir quais teclas foram pressionadas e enviar teclas. Para obter mais informações, consulte Acessando o teclado (Visual Basic).

Ordem dos Eventos do Teclado

Conforme listados anteriormente, existem 3 eventos relacionados ao teclado que podem ocorrer em um controle. A sequência seguinte mostra a ordem geral dos eventos:

  1. O usuário pressiona a tecla "a", a chave é preprocessada, despachada, e um evento KeyDown ocorre.

  2. O usuário segura a tecla "a", a tecla é preprocessada, despachada, e um evento KeyPress ocorre.

    Este evento ocorre várias vezes enquanto o usuário segura a tecla.

  3. O usuário solta a tecla "a", a tecla é preprocessada, despachada, e um evento KeyUp ocorre.

Pré-processamento de Teclas

Como outras mensagens, as mensagens do teclado são processadas no método WndProc de um formulário ou controle. No entanto, antes que as mensagens do teclado sejam processadas, o método PreProcessMessage chama um ou mais métodos que podem ser substituídos para manipular teclas de caracteres especiais e teclas físicas. Você pode substituir esses métodos para detectar e filtrar certas teclas antes que as mensagens sejam processadas pelo controle. A tabela a seguir mostra a ação que está sendo executada e o método relacionado que ocorre, na ordem que o método ocorre.

Pré-Processamento de um Evento KeyDown

Ação

Método relacionado

Anotações

Procure por uma tecla de comando como um acelerador ou um atalho para menu .

ProcessCmdKey

Este método processa uma tecla de comando, que tem precedência sobre teclas regulares. Se esse método retornar true, a mensagem da tecla não é enviada e um evento de tecla não ocorrerá. Se ele retornar false, IsInputKey será chamado .

Verifique se há uma chave especial que requer pré-processamento ou uma chave de caracteres normal deverá aumentar um KeyDown eventos e os expedidas para um controle.

IsInputKey

Se o método retornar true, isto significa que o controle é um caractere normal e um KeyDown evento é gerado. Se false, ProcessDialogKey é chamado.

ObservaçãoObservação
Para garantir que um controle receba uma tecla ou uma combinação de teclas, você pode manipular o evento PreviewKeyDown e definir IsInputKey do PreviewKeyDownEventArgs como true para a tecla ou teclas que você deseja.

Verifique se há uma chave de navegação (teclas de seta, guia, Return ou ESC).

ProcessDialogKey

Este método processa uma tecla física que utiliza uma funcionalidade especial dentro do controle, such as alternar o foco entre o controle e seu pai. Se o controle imediato não manipular a tecla, ProcessDialogKey é chamado no controle pai e assim por diante até o controle de nível mais alto na hierarquia. Se esse método retornar true, o pré-processamento está completo e uma evento de tecla não é gerado. Se ele retornar false, ocorre um evento KeyDown.

Pré-Processamento de um Evento KeyPress

Ação

Método relacionado

Anotações

Verifique se a chave é um caractere normal que deve ser processado pelo controle

IsInputChar

Se o caractere é um caractere normal, este método retornará true, o evento KeyPress é gerado e não ocorrerá mais pré-processamento. Caso contrário, ProcessDialogChar será chamado.

Verifique se o caractere é um mnemônico (como &OK em um botão)

ProcessDialogChar

Este método, de forma semelhante a ProcessDialogKey, será chamado subindo a hierarquia de controles. Se o controle for um recipiente de controles, ele procura mnemônicos chamando ProcessMnemonic em si mesmo e nos seus controles filhos. Se ProcessDialogChar retorna true, o evento KeyPress não ocorrerá.

Processando Mensagens de Teclado

Após que as mensagens do teclado alcançam o método WndProc de um controle ou formulário, eles são processados por um conjunto de métodos que podem ser substituídos. Cada um desses métodos retorna um valor Boolean especificando se a mensagem teclado foi processada e consumida pelo controle. Se um dos métodos retornar true, então a mensagem é considerada tratada e ela não é passada para a base ou pai do controle para processamento adicional. Caso contrário, a mensagem permanece na fila de mensagens e pode ser processada em outro método da base ou pai do controle. A tabela a seguir apresenta os métodos que processam mensagens do teclado.

Método

Anotações

ProcessKeyMessage

Este método processa todas as mensagens do teclado que são recebidas pelo método WndProc do controle.

ProcessKeyPreview

Este método envia a mensagem do teclado ao pai do controle. Se ProcessKeyPreview retorna true, nenhum evento de tecla é gerado, caso contrário, ProcessKeyEventArgs é chamado.

ProcessKeyEventArgs

Este método gera os eventos KeyDown, KeyPress e KeyUp, conforme apropriado.

Substituindo Métodos do Teclado

Há vários métodos disponíveis para serem substituidos quando uma mensagem do teclado é pré-processada e processada; no entanto, alguns métodos são opções muito melhores do que outros. Tabela a seguir mostra tarefas que você pode querer fazer e a melhor maneira para substituir os métodos do teclado. Para obter mais informações sobre substituição de métodos, consulte Overriding Properties and Methods.

Tarefa 

Método

Interceptar uma chave de navegação e disparar um KeyDown de evento. Por exemplo, você deseja guia e retornar para ser manipulado em uma caixa de texto.

Substitua IsInputKey.

ObservaçãoObservação
Como alternativa, você pode manipular o PreviewKeyDown evento e o conjunto de IsInputKey da PreviewKeyDownEventArgs para true para a chave ou teclas que você desejar.

Execute o tratamento especial de entrada ou de navegação em um controle. Por exemplo, você deseja que o uso de teclas de direção no seu controle lista alterem o item selecionado.

Substitua ProcessDialogKey.

Interceptar uma chave de navegação e disparar um KeyPress de evento. Por exemplo, em um controle caixa de rotação você deseja que vários pressionamentos de teclas de seta acelerem a progressão através dos itens.

Substitua IsInputChar.

Realizar um tratamento especial de entrada ou navegação durante um KeyPress de evento. Por exemplo, em um controle lista, manter pressionada a tecla "r" faz caminhar entre os itens que começam com a letra r.

Substitua ProcessDialogChar.

Executar tratamento mnemônico personalizado; por exemplo, você deseja manipular mnemônicos em botões desenhados pelo proprietário em uma barra de ferramentas.

Substitua ProcessMnemonic.

Consulte também

Referência

Keys

WndProc

PreProcessMessage

Conceitos

Acessando o teclado (Visual Basic)

Usando Eventos do Teclado

Outros recursos

My.Computer.Keyboard Object