Compartilhar via


Visão geral do uso do teclado (Windows Forms .NET)

No Windows Forms, a entrada do usuário é enviada aos aplicativos na forma de mensagens do Windows. Uma série de métodos substituíveis processam essas mensagens no nível do aplicativo, formulário e controle. Quando esses métodos recebem mensagens de teclado, eles geram eventos que podem ser manipulados para obter informações sobre a entrada do teclado. Em muitos casos, os aplicativos do Windows Forms serão capazes de processar todas as entradas do usuário simplesmente manipulando esses eventos. Em outros casos, um aplicativo pode precisar substituir um dos métodos que processam mensagens para interceptar uma mensagem específica antes de ela ser recebida pelo aplicativo, formulário ou controle.

Eventos de teclado

Todos os controles do Windows Forms herdam um conjunto de eventos relacionados às entradas de mouse e teclado. Por exemplo, um controle pode manipular o KeyPress evento para determinar o código de caractere de uma tecla que foi pressionada. Para obter mais informações, consulte Usando eventos de teclado.

Métodos que processam mensagens de entrada do usuário

Formulários e controles têm acesso à interface e a IMessageFilter um conjunto de métodos substituíveis que processam mensagens do Windows em diferentes pontos da fila de mensagens. Todos esses métodos têm um Message parâmetro, que encapsula os detalhes de baixo nível das mensagens do Windows. É possível implementar ou substituir esses métodos para analisar a mensagem e, então, consumi-la ou passá-la para o próximo consumidor na fila de mensagens. A tabela a seguir apresenta os métodos que processam todas as mensagens do Windows no Windows Forms.

Método Observações
PreFilterMessage Este método intercepta mensagens do Windows que estão na fila (também chamadas de postadas) no nível do aplicativo.
PreProcessMessage Este método intercepta as mensagens do Windows no nível do formulário e do controle antes que elas sejam processadas.
WndProc Este método processa mensagens do Windows no nível do formulário e do controle.
DefWndProc Esse método realiza o processamento padrão de mensagens do Windows no nível do formulário e do controle. Isso fornece a funcionalidade mínima de uma janela.
OnNotifyMessage Este método intercepta as mensagens do Windows no nível do formulário e do controle após o seu processamento. O EnableNotifyMessage bit de estilo deve ser definido para que esse método seja chamado.

Mensagens de teclado e mouse também são processadas por um conjunto adicional de métodos substituíveis específicos para esses tipos de mensagens. Para obter mais informações, consulte a seção Chaves de pré-processamento. .

Tipos de chaves

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 Windows. Você pode detectar a maioria dos pressionamentos de teclas físicas manipulando os KeyDown eventos or 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 Windows. Se a combinação de teclas pressionadas resultar em um caractere, você poderá detectar o caractere manipulando o KeyPress evento.

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 possui a tecla "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 tecla "a", a chave é pré-processada, despachada e ocorre um KeyUp evento.

Chaves de pré-processamento

Como outras mensagens, as mensagens do teclado são processadas no WndProc método de um formulário ou controle. No entanto, antes que as mensagens do teclado sejam processadas, o PreProcessMessage método chama um ou mais métodos que podem ser substituídos para lidar com 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 exija pré-processamento ou uma chave de caractere normal que deve gerar um KeyDown evento e ser despachada para um controle. IsInputKey Se o método retornar true, significa que o controle é um caractere regular e um KeyDown evento é gerado. Se false, ProcessDialogKey é chamado. Observação: Para garantir que um controle obtenha uma chave ou combinação de chaves, você pode manipular o PreviewKeyDown evento e IsInputKey definir o PreviewKeyDownEventArgs to true para a chave 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 ProcessDialogKey será chamado no controle pai e assim por diante para o 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 para 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 de 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 chegam ao 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 WndProc todas as mensagens de teclado recebidas 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 de chave será gerado, caso contrário ProcessKeyEventArgs , será chamado.
ProcessKeyEventArgs Esse método gera os KeyDowneventos , KeyPresse , KeyUp conforme apropriado.

Substituindo métodos de 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 Herança (Guia de Programação em C#) ou Herança (Visual Basic)

Tarefa Método
Intercepte uma chave 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. Observação: como alternativa, você pode manipular o PreviewKeyDown evento e o PreviewKeyDownEventArgs conjunto IsInputKey de to 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 chave 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.
Execute uma 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