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.
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:
O usuário pressiona a tecla "a", a chave é preprocessada, despachada, e um evento KeyDown ocorre.
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.
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 . |
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 . |
|
verifica se é uma tecla especial que requer pré-processamento ou se é um caractere normal que deve gerar um evento KeyDown e ser enviado para um controle. |
Se o método retornar true, isto significa que o controle é um caractere normal e um KeyDown evento é gerado.Se false, ProcessDialogKey é chamado.
Observação:
Para garantir um controle recebe uma chave ou uma combinação de teclas, você pode manipular o PreviewKeyDown evento e conjunto IsInputKey da PreviewKeyDownEventArgs para true para o chave ou chave s desejado.
|
|
Verifique se a tecla é uma tecla de navegação (teclas ESC, TAB, Retornar ou Seta) |
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 |
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) |
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 |
---|---|
Este método processa todas as mensagens do teclado que são recebidas pelo método WndProc do controle. |
|
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. |
|
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 Sobrescrevendo propriedades e métodos.
Tarefa |
Método |
---|---|
Interceptar uma tecla de navegação e gerar um evento KeyDown.Por exemplo, você deseja que TAB e RETURN sejam manipuladas em um caixa de texto |
Substitua IsInputKey. |
Executar uma entrada especial ou tratamento 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 tecla de navegação e gerar um evento KeyPress.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. |
Executar uma entrada especial ou tratamento de navegação durante um evento KeyPress.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. |