Domanda

Sto riscontrando un problema piuttosto sconcertante con il gestore della chiave di escape in una finestra di dialogo in Borland C ++ Builder 5. Esistono altri requisiti per la chiave di escape per generare un evento di annullamento (diversi da quelli che ho elencato di seguito) ?

  1. Il " Annulla " il pulsante (un TBitBtn) ha la proprietà Cancel impostata su true.
  2. Il " Annulla " il pulsante ha la proprietà Default impostata su false.
  3. Il " Annulla " Il pulsante modalResult è impostato su mrCancel.

Nota: Sto lavorando con una vecchia app legacy che è ancora in fase di compilazione in Borland C ++ Builder 5. Abbiamo un progetto separato per sostituirlo - Sto solo facendo manutenzione di fine vita.

Aggiorna

Quattro mesi dopo ho finalmente smesso di grattarmi la testa ... si scopre che il modulo genitore per l'applicazione aveva un gestore OnShortCut di runtime definito. Ho solo bisogno di disabilitarlo affinché il gestore Esc funzioni sulla finestra di dialogo figlio.

È stato utile?

Soluzione

Dovresti controllare tutti i possibili modi in cui l'evento di annullamento potrebbe essere bloccato:

  1. Prima di tutto, controlla se facendo clic sul pulsante Annulla si chiude effettivamente il modulo.

  2. Quindi controlla se per qualsiasi altro pulsante la sua proprietà Cancel è impostata su true.

  3. Dopo aver verificato tutti i gestori di eventi chiave, non dimenticare i gestori di eventi del modulo, soprattutto se KeyPreview è abilitato.

  4. Se il problema persiste, controlla se un altro componente ha la proprietà ShortCut impostata per gestire la chiave di escape.

  5. Controlla anche se ci sono agganci per tastiera attivi.

Altri suggerimenti

È possibile che la proprietà KeyPreview del form sia stata impostata su true. È qui che la chiave di escape è spesso / probabilmente disabilitata. La proprietà KeyPreview è spesso abilitata anche per acquisire la pressione del tasto [Invio] (ovvero OnKeyPress) per passare al campo successivo anziché chiudere il modulo.

Puoi anche creare un'altra finestra di dialogo, aggiungere il pulsante Annulla e vedere se il tasto Esc funziona. Quindi confronta la fonte DFM di entrambi i moduli e controlla le differenze nelle impostazioni.

Esiste un " CanClose " tipo evento con logica che impedisce la chiusura?

Ricorda inoltre che la finestra di dialogo deve essere invocata tramite ShowModal () anziché solo Show (). Ad esempio, se il modulo è denominato " FAskDialog " quindi il codice che lo visualizza dovrebbe essere come

FAskDialog- > ShowModal ();

anziché

FAskDialog- > Show ();

Se la finestra di dialogo viene invocata tramite Show (), quindi premendo un tasto Annulla o impostando ModalResult = mrCancel NON si chiuderà la finestra di dialogo.

questa è una vecchia domanda, posso dare una risposta:

Devi impostare KeyPreview = True e quindi scrivere Codice per intercettare la chiave ESC:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top