Pregunta

Tengo un problema bastante desconcertante con el controlador de la tecla Escape en un cuadro de diálogo en Borland C ++ Builder 5. ¿Hay otros requisitos para que la tecla Escape active un evento de cancelación (además de los que he enumerado a continuación) ?

  1. El " Cancelar " el botón (un TBitBtn) tiene su propiedad Cancelar establecida en verdadero.
  2. El " Cancelar " botón tiene su propiedad predeterminada establecida en falso.
  3. El " Cancelar " botón tiene su modalResult establecido en mrCancel.

Nota: Estoy trabajando con una aplicación antigua que aún se está compilando en Borland C ++ Builder 5. Tenemos un proyecto separado para reemplazarlo: solo estoy haciendo el mantenimiento de la vida útil.

Actualizar

Cuatro meses después, finalmente dejé de rascarme la cabeza ... resulta que el formulario principal de la aplicación tenía un controlador OnShortCut en tiempo de ejecución definido. Solo necesitaba deshabilitar eso para que el controlador de Esc funcione en el cuadro de diálogo secundario.

¿Fue útil?

Solución

Debería verificar todas las formas posibles de bloquear el evento de cancelación:

  1. En primer lugar, compruebe si al hacer clic en el botón de cancelar se cierra el formulario.

  2. Luego, verifique si algún otro botón tiene su propiedad Cancelar establecida en verdadero.

  3. Después de eso, verifique todos los controladores de eventos clave, no olvide los controladores de eventos del formulario, especialmente si tiene KeyPreview habilitado.

  4. Si aún no encuentra el problema, verifique si otro componente tiene su propiedad ShortCut configurada para manejar la clave de escape.

  5. También verifique si hay algún enlace de teclado activo.

Otros consejos

Es posible que la propiedad KeyPreview del formulario se haya establecido en true. Aquí es donde la clave de Escape es a menudo / probablemente ha sido deshabilitada. La propiedad KeyPreview también está habilitada a menudo para capturar la tecla [Retorno] presionando (es decir, OnKeyPress) para avanzar al siguiente campo en lugar de cerrar el formulario.

También puede crear otro cuadro de diálogo, agregar el botón Cancelar en él y ver si la tecla Escape funciona. Luego compare la fuente DFM de ambos formularios y verifique las diferencias en la configuración.

¿Hay un " CanClose " escriba evento con lógica que evite que se cierre?

También tenga en cuenta que el cuadro de diálogo debe invocarse mediante ShowModal () en lugar de solo Show (). Por ejemplo, si su formulario se llama " FAskDialog " entonces el código que lo muestra debería ser como

FAskDialog- > ShowModal ();

en lugar de

FAskDialog- > Show ();

Si el cuadro de diálogo se invoca mediante Mostrar (), al presionar una tecla de cancelación o al configurar ModalResult = mrCancel NO se cerrará el cuadro de diálogo.

esta es una vieja pregunta, puedo dar respuesta:

Debe establecer KeyPreview = True y luego escribir el Código para atrapar la tecla ESC:

Form1 :: OnKeyUp (...)
{
  if (Key == 27) {
    Cerrar ();
  }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top