Compartilhar via


Visão geral do uso do teclado

No Windows Forms, a entrada do usuário é enviada para 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 tratados para obter informações sobre a entrada do teclado. Em muitos casos, os aplicativos do Windows Forms sã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 ser recebido pelo aplicativo, formulário ou controle.

Eventos de teclado

Todos os controles do Windows Forms herdam um conjunto de eventos relacionados à entrada do mouse e do 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 IMessageFilter e a um conjunto de métodos substituíveis que processam mensagens do Windows em diferentes pontos na fila de mensagens. Todos esses métodos têm um parâmetro Message, que encapsula os detalhes de baixo nível das mensagens do Windows. Você pode implementar ou substituir esses métodos para examinar a mensagem e, em seguida, consumir a mensagem 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 nos Windows Forms.

Método Anotaçõ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 Esse método intercepta mensagens do Windows no nível de formulário e controle antes de serem processadas.
WndProc Esse método processa mensagens do Windows no nível de formulário e controle.
DefWndProc Esse método executa o processamento padrão de mensagens do Windows no nível de formulário e controle. Isso fornece a funcionalidade mínima de uma janela.
OnNotifyMessage Esse método intercepta as mensagens no nível do formulário e do controle, depois que elas são processadas. O bit de estilo EnableNotifyMessage deve ser definido para que esse método seja chamado.

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

Tipos de chaves

O Windows Forms identifica a entrada do teclado como códigos de teclas virtuais 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 o WM_KEYDOWN e WM_SYSKEYDOWN mensagens do Windows. Você pode detectar a maioria das teclas físicas ao lidar com os eventos KeyDown ou KeyUp. As chaves de caractere são um subconjunto da Keys enumeração e correspondem aos valores que acompanham o WM_CHAR e WM_SYSCHAR mensagens 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 Keyboard, exposto pela interface de programação do Visual Basic, para descobrir quais teclas foram pressionadas e enviar chaves. Para obter mais informações, consulte Acessando o teclado (Visual Basic).

Ordem dos eventos de teclado

Conforme listado anteriormente, há três eventos relacionados ao teclado 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 tecla é pré-processada, despachada e ocorre um evento KeyDown.
  2. O usuário mantém pressionada a tecla A, a tecla é pré-processada, despachada e um evento KeyPress ocorre. Esse evento ocorre várias vezes à medida que o usuário mantém uma chave.
  3. O usuário libera a chave A , a chave é pré-processada, despachada e ocorre um KeyUp evento.

Chaves de pré-processamento

Assim como outras mensagens, as mensagens de teclado são processadas no WndProc método de um formulário ou controle. No entanto, antes que as mensagens de teclado sejam processadas, o PreProcessMessage método chama um ou mais métodos que podem ser substituídos para lidar com teclas de caractere especiais e teclas físicas. Você pode substituir esses métodos para detectar e filtrar determinadas chaves antes que o controle processe as mensagens. 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 para um evento KeyDown

Ação Método relacionado Anotações
Verifique se há uma chave de comando, como um acelerador ou atalho de menu. ProcessCmdKey Esse método processa uma chave de comando, que tem precedência sobre chaves regulares. Se esse método retornar true, a mensagem de chave não será expedida e um evento de chave não ocorrerá. Se ele retornar false, IsInputKey será chamado.
Verifique se há uma chave especial que requer pré-processamento ou uma chave de caractere normal que deve gerar um KeyDown evento e ser enviada 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 será chamado. Nota: Para garantir que um controle obtenha uma chave ou uma combinação de chaves, você pode lidar com o evento PreviewKeyDown e definir IsInputKey de PreviewKeyDownEventArgs para true a tecla ou as chaves desejadas.
Verifique se há uma chave de navegação (teclas ESC, TAB, Return ou seta). ProcessDialogKey Esse método processa uma chave física que emprega funcionalidades especiais dentro do controle, como alternar o foco entre o controle e seu pai. Se o controle imediato não manipular a chave, o ProcessDialogKey é chamado no controle pai e assim por diante, até o controle no topo da hierarquia. Se esse método retornar true, o pré-processamento será concluído e um evento chave não será gerado. Se retornar false, ocorrerá um evento KeyDown.

Pré-processamento para 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 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 é mnemônico (como &OK em um botão) ProcessDialogChar Esse método, semelhante a ProcessDialogKey, é 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, não ocorrerá um evento KeyPress.

Processamento de mensagens de teclado

Depois que as mensagens de 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 que especifica se a mensagem de teclado foi processada e consumida pelo controle. Se um dos métodos retornar true, a mensagem será considerada tratada e não será passada para a base ou o pai do controle para processamento adicional. Caso contrário, a mensagem permanecerá na fila de mensagens e poderá ser processada em outro método na classe base ou no elemento pai do controle. A tabela a seguir apresenta os métodos que processam mensagens de teclado.

Método Anotações
ProcessKeyMessage Esse método processa todas as mensagens de teclado recebidas pelo WndProc método do controle.
ProcessKeyPreview Esse método envia a mensagem de 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 eventos KeyDown, KeyPress e KeyUp, conforme apropriado.

Sobrescrevendo métodos de teclado

Há muitos métodos disponíveis para substituição quando uma mensagem de teclado é pré-processada e processada; no entanto, alguns métodos são melhores opções do que outros. A tabela a seguir mostra as tarefas que talvez você queira realizar e a melhor maneira de substituir os métodos de teclado. Para obter mais informações sobre métodos de substituição, consulte Herança (Guia de Programação em C#) ou Herança (Visual Basic)

Tarefa Método
Interceptar uma tecla de navegação e disparar um evento KeyDown. Por exemplo, você deseja que Tab e Enter sejam manipulados em uma caixa de texto. Substituir IsInputKey. Como alternativa, você pode manipular o evento PreviewKeyDown e definir o IsInputKey do PreviewKeyDownEventArgs para true da chave ou das chaves desejadas.
Executar uma manipulação especial de entrada de dados ou navegação em um controle. Por exemplo, você deseja que o uso de teclas de direção no controle de lista altere o item selecionado. Sobrescrever ProcessDialogKey
Interceptar uma tecla de navegação e disparar um evento KeyPress. Por exemplo, em um controle de spin-box, você deseja que várias pressões das setas do teclado acelerem a progressão pelos itens. Substituir IsInputChar.
Realize uma manipulação especial de entrada ou navegação durante um evento KeyPress. Por exemplo, em um controle de lista que mantém pressionada a tecla R ignora os itens que começam com a letra r. Sobrescrever ProcessDialogChar
Executar manipulação mnemônica personalizada; por exemplo, você deseja manipular mnemônicos em botões desenhados pelo proprietário contidos em uma barra de ferramentas. Substituir ProcessMnemonic.

Consulte também