Partilhar via


Como a entrada do teclado funciona

O Windows Forms processa a entrada do teclado ao gerar eventos de teclado em resposta às mensagens do Windows. A maioria dos aplicativos Windows Forms processa a entrada do teclado exclusivamente ao manipular eventos de teclado. No entanto, você precisa entender como as mensagens do teclado funcionam para que você possa implementar cenários mais avançados de entrada do teclado, como interceptar teclas antes que elas atinjam um controle. Este tópico descreve os tipos de dados da chave que o Windows Forms reconhece e fornece uma visão geral de como as mensagens do teclado são roteadas. Para obter informações sobre eventos de teclado, consulte Usando eventos do teclado.

Tipos de teclas

O Windows Forms identifica a entrada do teclado como códigos de chave virtual que são representados pela enumeração bit a bit.Keys Com a Keys enumeração, você pode combinar uma série de teclas pressionadas para resultar em um único valor. Esses valores correspondem aos valores que acompanham as mensagens WM_KEYDOWN e WM_SYSKEYDOWN do Windows. Você pode detectar a maioria dos pressionamentos de teclas físicas manipulando os KeyDown eventos ou KeyUp . As chaves de caractere são um subconjunto da Keys enumeração e correspondem aos valores que acompanham as mensagens WM_CHAR e WM_SYSCHAR do Windows. Se a combinação de teclas pressionadas resultar em um caractere, você poderá detectar o caractere manipulando o KeyPress evento. Como alternativa, você pode usar Keyboardo , 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.

Ordem dos eventos do teclado

Conforme listado anteriormente, existem três eventos relacionados que podem ocorrer em um controle. A sequência a seguir mostra a ordem geral dos eventos:

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

  2. O usuário mantém a chave "a", a chave é pré-processada, despachada e ocorre um KeyPress evento.

    Esse evento ocorre várias vezes enquanto o usuário pressiona uma tecla.

  3. O usuário libera a chave "a", a chave é pré-processada, despachada e ocorre um KeyUp evento.

Pré-processamento das teclas

Como outras mensagens, as mensagens do teclado são processadas WndProc no método de um formulário ou controle. No entanto, antes que as mensagens do teclado sejam processadas, o método chama um ou mais métodos que PreProcessMessage 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 em que o método ocorre.

Pré-processamento de um evento KeyDown

Ação Método relacionado Observações
Verifique se há uma chave de comando como um acelerador ou um atalho de menu. ProcessCmdKey Este método processa uma chave de comando, que tem precedência sobre teclas regulares. Se esse método retornar true, a mensagem principal não será enviada e um evento de tecla não ocorrerá. Se ele retornar false, IsInputKey é chamado.
Verifique se há uma chave especial que requer pré-processamento ou uma chave de caractere normal que deve gerar um evento e ser despachada para um KeyDown controle. IsInputKey Se o método retornar true, isso significa que o controle é um caractere regular e um KeyDown evento é gerado. Se false, ProcessDialogKey é chamado. Nota: Para garantir que um controle obtenha uma tecla ou combinação de teclas, você pode manipular o evento e o PreviewKeyDown conjunto IsInputKey de para true para PreviewKeyDownEventArgs a ou chaves desejadas.
Verifique se há uma tecla de navegação (teclas ESC, TAB, Enter ou teclas de seta). ProcessDialogKey Este método processa uma tecla física que utiliza uma funcionalidade especial dentro do controle, como alternar o foco entre o controle e seu pai. Se o controle imediato não manipular a chave, o é chamado no controle pai e assim por diante para o ProcessDialogKey controle mais alto na hierarquia. Se esse método retornar true, o pré-processamento estará completo e um evento de tecla não será gerado. Se ele retornar false, ocorrerá um KeyDown evento.

Pré-processamento de um evento KeyPress

Ação Método relacionado Observações
Verifique se a chave é um caractere normal que deve ser processado pelo controle IsInputChar Se o caractere for um caractere normal, esse método retornará true, o KeyPress evento será gerado e nenhum pré-processamento adicional ocorrerá. Caso contrário ProcessDialogChar será chamado.
Verifique se o caractere é um mnemônico (como &OK em um botão) ProcessDialogChar Esse método, semelhante ao ProcessDialogKey, será chamado para a hierarquia de controle. Se o controle for um controle de contêiner, ele verificará se há mnemônicos chamando ProcessMnemonic a si mesmo e seus controles filho. Se ProcessDialogChar retornar true, um KeyPress evento não ocorrerá.

Processando mensagens do teclado

Depois que as mensagens do teclado atingem o WndProc método de um formulário ou controle, elas são processadas por um conjunto de métodos que podem ser substituídos. Cada um desses métodos retorna um Boolean valor especificando se a mensagem do teclado foi processada e consumida pelo controle. Se um dos métodos retornar true, então a mensagem será considerada tratada e ela não será passada para a base ou pai do controle para processamento adicional. Caso contrário, a mensagem permanecerá na fila e poderá 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 Observações
ProcessKeyMessage Esse método processa todas as mensagens de teclado que são recebidas WndProc pelo método do controle.
ProcessKeyPreview Esse método envia a mensagem do teclado para o pai do controle. Se ProcessKeyPreview retornar true, nenhum evento chave será gerado, caso contrário ProcessKeyEventArgs , será chamado.
ProcessKeyEventArgs Esse método gera o KeyDown, e KeyUp eventos, KeyPressconforme apropriado.

Substituindo métodos do teclado

Há vários métodos disponíveis para substituição quando uma mensagem do teclado é pré-processada e processada. No entanto, alguns métodos são opções muito melhores do que outros. A tabela a seguir mostra tarefas que você talvez queira realizar e a melhor maneira de substituir os métodos do teclado. Para obter mais informações sobre como substituir métodos, consulte Substituindo propriedades e métodos em classes derivadas.

Tarefa Método
Intercepte uma tecla de navegação e gere um KeyDown evento. Por exemplo, você deseja que as teclas TAB e Enter sejam identificadas em uma caixa de texto. Substitua IsInputKey. Nota: Como alternativa, você pode manipular o evento e o PreviewKeyDown PreviewKeyDownEventArgs conjunto IsInputKey do para true para a chave ou chaves desejadas.
Execute tratamento de navegação ou entrada especial em um controle. Por exemplo, você deseja usar as teclas de seta no controle de lista para alterar o item selecionado. Substituir ProcessDialogKey
Intercepte uma tecla de navegação e gere um KeyPress evento. Por exemplo, em um controle de caixa de rotação você deseja o pressionamento de várias teclas de seta para acelerar a progressão pelos itens. Substitua IsInputChar.
Executar entrada especial ou manipulação de navegação durante um KeyPress evento. Por exemplo, em uma controle de lista, manter pressionada a tecla "r" ignora os itens que começam com a letra r. Substituir ProcessDialogChar
Execute o tratamento mnemônico personalizado. Por exemplo, você deseja manipular mnemônicos em botões desenhados pelo proprietário contidos em uma barra de ferramentas. Substitua ProcessMnemonic.

Confira também