Usuário com melhor resposta
Capturar tecla enter em um form - protected override bool ProcessCmdKey

Pergunta
-
A única maneira que encontrei de pegar o evento da tecla enter num form foi:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Enter) Console.WriteLine("enter!"); }
O evento private void Form1_KeyDown(object sender, KeyEventArgs e) não é disparado com a tecla enter.. Não sei pq!
1. Essa maneira que eu fiz esta correta?
2. Onde está o evento original que eu dei override?
- Movido Rui SantosModerator quarta-feira, 10 de novembro de 2010 17:28 (De:.NET Development - Geral)
Respostas
Todas as Respostas
-
Deusiro,
Você pode usar o KeyDown, porem você deve setar a propriedade KeyPreview do form para True.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Rui SantosModerator quarta-feira, 10 de novembro de 2010 17:29
- Não Marcado como Resposta Rui SantosModerator quarta-feira, 10 de novembro de 2010 17:30
- Sugerido como Resposta Rui SantosModerator quarta-feira, 10 de novembro de 2010 17:30
-
-
-
Segue a sua explicação sobre o ProcessCmdKey:
"Esse método é chamado durante a pré-processamento de mensagem para Identificador Chaves de comando. Teclas de comando são chaves sempre têm precedência sobre as chaves de entrada regulares. Exemplos de teclas de comando Incluir aceleradores e menus de atalho. O método deve Retorno true para indicar que processou a chave de comando ou false para indicar que a chave não é um comando chave. Esse método é chamado Apenas quando o controle está hospedado em um aplicativo Janelas Formulários ou sistema autônomo um Controle do ActiveX.
O ProcessCmdKey método primeiro determina se o controle possui uma ContextMenu e em caso afirmativo, permite que o ContextMenu para processar a chave de comando. Se a chave de comando não é um atalho do menu e o controle tem um pai, a chave é Passado para ProcessCmdKey método. do pai O resultado é que as chaves são "bubbled" superiores da hierarquia de controle de comando. Juntamente com a chave que o usuário pressionou, sistema autônomo Dadsistema autônomodsistema autônomo Dadsistema autônomo chave indicam também que, se Qualquer, sistema autônomo teclsistema autônomo modificadorsistema autônomo foram pressionaDadsistema autônomos ao mesmo Hora, como a chave. Teclas modificadoras incluem Chaves deslocar, CTRL e ALT.
Observações para herdeirosAo substituir o ProcessCmdKey método em uma classe derivada, um controle deve Retorno true para indicar que tiver processado a chave. Para as chaves que não são processadas pelo controle, o resultado da chamada ProcessCmdKey método deve ser retornado. Controles raramente, se nunca, precisará substituir esse método."
Fonte: http://msdn.microsoft.com/pt-br/library/system.windows.forms.control.processcmdkey.aspx
Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente.... -
Apropriedade "KeyPreview" do form serve justamente para que primeiro vc processe as informações de key no form e depois nos controls...
Da uma olhada no link informado pelo Rógerio
Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente.... -
Deusiro,
Você pode usar o KeyDown, porem você deve setar a propriedade KeyPreview do form para True.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
-
Pedro,
Pelo que vi, este é um funcionamento padrão, você teria que fazer um tratamento para não executar o click do botão, confira este post:
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
-
Obrigado pela explicacao, agora essa tradução para PT do msdn eh TERRÍVEL! Olha isso... Deviam botar essa traducao como segunda opcao, primeiro mostrar em ingles.. Credo
Entao... isso é configuravel :P aqui primeiro vem em ingles.... mas nem lembro mais onde mexi para arrumar isso...
Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente.... -
Configure a propriedade KeyPreview do formulário que irá capturar o evento da tecla "ENTER - (Return)" como true.
Agora é só verificar se a tecla pressionada pelo usuário foi a tecla "ENTER - (Return)", através do evento KeyDown do formulário. Este evento é disparado toda vez que o usuário pressiona uma tecla.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter){
Console.WriteLine("Tecla enter pressionada!");
}
}
Fontes:
http://msdn.microsoft.com/pt-br/library/system.windows.forms.keys(v=vs.110).aspx
http://msdn.microsoft.com/pt-br/library/system.windows.forms.keyeventargs(v=vs.110).aspx
- Editado Heliton Junior quinta-feira, 18 de setembro de 2014 21:05 Inserção das fontes consultadas.