Borland C ++ Builder 5 - Anular Via Tecla Escape não funciona
-
03-07-2019 - |
Pergunta
Eu estou lá tendo um problema bastante desconcertante com o manipulador tecla Esc em uma caixa de diálogo no Borland C ++ Builder 5. São quaisquer outros requisitos para a tecla Esc para disparar um evento (excepto os que eu listei abaixo) cancelar ?
- O botão "Cancelar" (a TBitBtn) tem sua Anular conjunto de propriedades como true.
- O botão "Cancelar" tem o seu conjunto de propriedades padrão para false.
- O botão "Cancelar" tem o seu conjunto ModalResult para mrCancel.
Nota: Eu estou trabalhando com um aplicativo legado antigo que ainda está sendo compilado no Borland C ++ Builder 5. Nós temos um projeto separado para substituí-lo - Estou apenas fazendo final de manutenção da vida
.Atualizar
Quatro meses depois eu finalmente parou de coçar a cabeça ... verifica-se que o formulário pai para a aplicação tinha um tempo de execução OnShortCut manipulador definido. Eu só precisava desativar que para o manipulador Esc para trabalhar no diálogo filho.
Solução
Você deve verificar todas as formas possíveis a cancelar evento poderia ser bloqueado:
-
Em primeiro lugar, verificar se clicar no botão cancelar na verdade fecha o formulário.
-
Em seguida, verifique se qualquer outro botão tem o seu conjunto Cancel propriedade para true.
-
Depois que o check todos os manipuladores de eventos importantes, não se esqueça dos manipuladores de eventos da forma, especialmente se você tiver KeyPreview habilitado.
-
Se você ainda não encontrar o problema, verifique se outro componente tem o seu conjunto de propriedades atalho para lidar com a chave de escape.
-
Além disso, verifique se há qualquer teclado conecta ativa.
Outras dicas
Pode ser que a propriedade KeyPreview do formulário foi definido como verdadeiro. Este é o lugar onde a tecla Esc é frequentemente / provável que tenha sido desativado. A propriedade KeyPreview é também é frequentemente activado para captura [Return] pressione a tecla (ou seja OnKeyPress) para avançar para o próximo campo, em vez de fechar o formulário.
Você também pode criar outro diálogo, adicionar botão Cancelar para ele e ver se as obras fundamentais Escape. Em seguida, compare a fonte DFM de ambas as formas e verificar as diferenças nas configurações.
Existe um tipo de evento "CanClose" com a lógica impedindo-a de fechamento?
Também tenha em mente que as necessidades de diálogo a ser invocado via ShowModal () ao invés de apenas show (). Por exemplo, se o formulário é denominado "FAskDialog", em seguida, o código que exibe ele deve ser como
FAskDialog-> ShowModal ();
em vez de
FAskDialog-> Show ();
Se o diálogo é invocada via Show (), em seguida, bater a tecla de cancelamento ou a criação ModalResult = mrCancel não fará com que o diálogo para perto.
Esta é uma velha questão, posso dar resposta:
Você precisa definir KeyPreview = True e, em seguida, escrever código para interceptar a tecla ESC:
Form1 :: OnKeyUp (...)
{
if (Key == 27) {
Close ();
}
}