Question

Je rencontre un problème plutôt compliqué avec le gestionnaire de clé Échap dans une boîte de dialogue de Borland C ++ Builder 5. Existe-t-il d'autres conditions pour que la touche Échap déclenche un événement d'annulation (autre que celles répertoriées ci-dessous)? ?

  1. Le " Annuler " bouton (un TBitBtn) a sa propriété Cancel définie sur true.
  2. Le " Annuler " La propriété Default de ce bouton est définie sur false.
  3. Le " Annuler " Le bouton modalResult est défini sur mrAnnuler.

Remarque: Je travaille avec une ancienne application existante, toujours compilée dans Borland C ++ Builder 5. Nous avons un projet distinct pour la remplacer: je ne fais que la maintenance en fin de vie.

Mettre à jour

Quatre mois plus tard, j'ai finalement arrêté de me gratter la tête ... il s'est avéré que le formulaire parent de l'application avait défini un gestionnaire OnShortCut au moment de l'exécution. Je devais simplement le désactiver pour que le gestionnaire Esc puisse fonctionner dans la boîte de dialogue enfant.

Était-ce utile?

La solution

Vous devez vérifier toutes les manières possibles de bloquer l'événement annulé:

  1. Tout d'abord, vérifiez si cliquer sur le bouton Annuler ferme réellement le formulaire.

  2. Vérifiez ensuite si un autre bouton a sa propriété Cancel définie sur true.

  3. Après avoir vérifié tous les gestionnaires d'événements clés, n'oubliez pas les gestionnaires d'événements du formulaire, surtout si KeyPreview est activé.

  4. Si vous ne trouvez toujours pas le problème, vérifiez si la propriété ShortCut d'un autre composant est définie pour gérer la touche d'échappement.

  5. Vérifiez également s’il existe des raccords clavier actifs.

Autres conseils

Il se peut que la propriété KeyPreview du formulaire ait été définie sur true. C’est là que la touche Échap est souvent / susceptible d’être désactivée. La propriété KeyPreview est également souvent activée pour capturer la touche [Retour] au clavier (I.e. OnKeyPress) afin de passer au champ suivant plutôt que de fermer le formulaire.

Vous pouvez également créer une autre boîte de dialogue, y ajouter un bouton Annuler et voir si la touche Échap fonctionne. Comparez ensuite la source DFM des deux formulaires et vérifiez les différences de paramètres.

Existe-t-il un "CanClose"? tapez un événement avec une logique l'empêchant de se fermer?

N'oubliez pas non plus que la boîte de dialogue doit être appelée via ShowModal () plutôt que simplement Show (). Par exemple, si votre formulaire est nommé " FAskDialog " alors le code qui l'affiche devrait être comme

FAskDialog- > ShowModal ();

plutôt que

FAskDialog- > Show ();

Si la boîte de dialogue est appelée via Show (), appuyer sur une touche d'annulation ou définir ModalResult = mrCancel ne provoque PAS la fermeture de la boîte de dialogue.

c'est une vieille question, je peux donner une réponse:

Vous devez définir KeyPreview = True, puis écrire du code pour intercepter la clé ESC:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top