Eu tentei o seguinte:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ((Keys) e.KeyValue == Keys.Escape)
this.Close();
}
Mas não funciona.
Então eu tentei isso:
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Escape)
this.Close();
}
E ainda nada está funcionando.
O KeyPreview nas propriedades do formulário do Windows Forms está definido como verdadeiro ... O que estou fazendo de errado?
Respostas:
Isso sempre funcionará, independentemente da atribuição adequada do manipulador de eventos, KeyPreview, CancelButton etc:
fonte
true
deProcessCmdKey
para sinalizar que a chave está manuseada, evitando assim o ruído "ding".Você deve apenas ser capaz de definir a
CancelButton
propriedade do Form para o botão Cancelar e então você não precisará de nenhum código.fonte
Supondo que você tenha um botão "Cancelar", a configuração da
CancelButton
propriedade do formulário (no designer ou no código) deve cuidar disso automaticamente. Basta colocar o código para fechar noClick
caso do botão.fonte
A resposta aceita de fato está correta, e usei essa abordagem várias vezes. De repente, não funcionava mais, então achei estranho. Principalmente porque meu ponto de interrupção não seria pressionado para a ESCtecla, mas sim para outras teclas.
Após a depuração, descobri que um dos controles do meu formulário estava substituindo o
ProcessCmdKey
método, com este código:... e isso estava impedindo meu formulário de obter a ESCchave (observe o
return true
). Portanto, certifique-se de que nenhum controle filho esteja controlando sua entrada.fonte
Você define KeyPreview como true nas opções de formulário e, em seguida, adiciona o evento Keypress a ele. No evento de pressionamento de tecla, você digita o seguinte:
key.Char == 27
é o valor de escape no código ASCII.fonte
Por botão Escape você quer dizer a tecla Escape? A julgar pelo seu código, acho que é o que você deseja. Você também pode tentar Application.Exit (), mas Close deve funcionar. Você tem um thread de trabalho? Se um thread não em segundo plano estiver em execução, isso pode manter o aplicativo aberto.
fonte
Você precisa adicionar isso ao evento "KeyUp".
fonte
Você também pode disparar alguma outra forma.
Por exemplo, acione um botão Cancelar se você editar a propriedade CancelButton do formulário e definir o botão Cancelar.
No código, você segue o botão Cancelar da seguinte maneira para fechar o formulário:
fonte