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 ?

  1. O botão "Cancelar" (a TBitBtn) tem sua Anular conjunto de propriedades como true.
  2. O botão "Cancelar" tem o seu conjunto de propriedades padrão para false.
  3. 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.

Foi útil?

Solução

Você deve verificar todas as formas possíveis a cancelar evento poderia ser bloqueado:

  1. Em primeiro lugar, verificar se clicar no botão cancelar na verdade fecha o formulário.

  2. Em seguida, verifique se qualquer outro botão tem o seu conjunto Cancel propriedade para true.

  3. 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.

  4. 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.

  5. 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 ();
}
}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top