Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No Windows Forms, a entrada do usuário é enviada para aplicativos na forma de mensagens Windows. Uma série de métodos substituíveis processam essas mensagens no nível de 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 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 intercetar uma mensagem específica antes que ela seja recebida pelo aplicativo, formulário ou controle.
Eventos de teclado
Todos os controles do Windows Forms herdam um conjunto de eventos relacionados à entrada de mouse e teclado. Por exemplo, um controle pode manipular o evento KeyPress 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 da 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 no Windows Forms.
| Método | Observações |
|---|---|
| PreFilterMessage | Esse método interceta mensagens do Windows enfileiradas (também conhecidas como postadas) no nível do aplicativo. |
| PreProcessMessage | Esse método interceta 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 | Este método interceta mensagens ao nível do formulário e do controle, depois de terem sido processadas. O bit de estilo EnableNotifyMessage deve ser definido para que esse método seja chamado. |
As 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 Chaves de pré-processamento.
Tipos de chaves
O Windows Forms identifica a entrada do teclado como códigos de teclas virtuais que são representados pela enumeração bit a bit Keys. Com a enumeração Keys, 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 detetar a maioria das teclas físicas pressionadas manipulando os eventos KeyDown ou KeyUp. As chaves de caracteres são um subconjunto da enumeração Keys 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á detetá-lo manipulando 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 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:
- O utilizador pressiona a tecla A, a tecla é pré-processada, despachada e ocorre um evento KeyDown.
- O utilizador mantém a tecla A, a tecla é pré-processada, despachada e um evento KeyPress ocorre. Esse evento ocorre várias vezes quando o usuário segura uma chave.
- O usuário libera a chave 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 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 detetar 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 | Observações |
|---|---|---|
| Verifique se há uma tecla de comando, como um acelerador ou atalho de menu. | ProcessCmdKey | Este método processa uma chave de comando, que tem precedência sobre as teclas regulares. Se esse método retornar true, a mensagem principal não será enviada e um evento chave 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 KeyDown e ser despachada para um controle. | IsInputKey | Se o método retornar true, isso significa que o controle é um caractere regular e um evento KeyDown é gerado. Se false, ProcessDialogKey é chamado.
Nota: Para garantir que um controle obtenha uma chave ou combinação de chaves, você pode manipular o evento PreviewKeyDown e definir IsInputKey do PreviewKeyDownEventArgs para true a chave ou chaves desejadas. |
| Verifique se há uma tecla de navegação (ESC, TAB, Return ou teclas de seta). | ProcessDialogKey | Este método processa uma tecla física que emprega funcionalidades especiais dentro do controlo, como alternar o foco entre o controlo e o seu elemento-pai. Se o controlo imediato não manipular a chave, o ProcessDialogKey é chamado no controlo pai, e assim por sequência, até ao controlo mais alto na hierarquia. Se esse método retornar true, o pré-processamento será concluído e um evento chave não será gerado. Se ele retornar false, ocorrerá um evento KeyDown. |
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 evento KeyPress é gerado e nenhum pré-processamento adicional ocorre. Caso contrário, chama-se ProcessDialogChar. |
| Verifique se o carácter é uma mnemónica (como &OK num botão) | ProcessDialogChar | Este método, semelhante ao ProcessDialogKey, é chamado de hierarquia de controle. Se o controlo for um controlo de contentor, verificará a presença de mnemónicos chamando ProcessMnemonic no próprio controlo e nos seus controlos criança. Se ProcessDialogChar devolver true, um evento KeyPress não ocorre. |
Processamento de 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 valor Boolean especificando se a mensagem do teclado foi processada e consumida pelo controle. Se um dos métodos retornar true, a mensagem será considerada manipulada e não será passada para a base ou pai do controle para processamento posterior. Caso contrário, a mensagem permanece na fila de mensagens e pode ser processada em outro método no controle de base ou superior. A tabela a seguir apresenta os métodos que processam mensagens de teclado.
| Método | Observações |
|---|---|
| ProcessKeyMessage | Esse método processa todas as mensagens de teclado que são recebidas pelo método WndProc 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 | Este método gera os eventos KeyDown, KeyPresse KeyUp, conforme apropriado. |
Substituindo métodos de teclado
Há muitos métodos disponíveis para substituir quando uma mensagem de teclado é pré-processada e processada; No entanto, alguns métodos são melhores escolhas do que outros. A tabela a seguir mostra as tarefas que você pode querer realizar e a melhor maneira de substituir os métodos do teclado. Para obter mais informações sobre métodos de substituição, consulte Inheritance (C# Programming Guide) ou Inheritance (Visual Basic)
| Tarefa | Método |
|---|---|
| Intercepte uma tecla de navegação e gere um evento KeyDown. Por exemplo, você deseja que Tab e Enter sejam manipulados em uma caixa de texto. | Anule IsInputKey. Como alternativa, pode manipular o evento PreviewKeyDown e definir IsInputKey de PreviewKeyDownEventArgs para true para a chave ou chaves desejadas. |
| Execute uma entrada especial ou manipulação de navegação em um controle. Por exemplo, você quer que as teclas de seta no seu controlo de lista alterem o item selecionado. | Substituir ProcessDialogKey |
| Intercepte uma tecla de navegação e gere um evento KeyPress. Por exemplo, em um controle de caixa giratória, você deseja pressionar várias teclas de seta para acelerar a progressão pelos itens. | Anule IsInputChar. |
| Executar um processamento especial de entrada ou navegação durante um evento KeyPress. Por exemplo, em um controle de lista mantendo pressionada a tecla R pula entre itens que começam com a letra r. | Substituir ProcessDialogChar |
| Realizar manuseamento mnemónico personalizado; Por exemplo, você deseja manipular mnemônicos em botões desenhados pelo proprietário contidos em uma barra de ferramentas. | Anule ProcessMnemonic. |
Ver também
.NET Desktop feedback