Frage

Ich habe ein ziemlich verwirrendes Problem mit der Escape-Taste Handler auf einem Dialogfeld in Borland C ++ Builder 5. Gibt es weitere Anforderungen an die Escape-Taste, um ein Ereignis abbrechen Feuer (andere als die, die ich aufgeführt habe unten) ?

  1. Die Schaltfläche "Abbrechen" (a TBitBtn) hat seine Cancel-Eigenschaft auf true gesetzt.
  2. Die Schaltfläche „Abbrechen“ auf false seiner Eigenschaft Standard gesetzt hat.
  3. Die Schaltfläche "Abbrechen" hat seine ModalResult auf mrCancel gesetzt.

Hinweis: Ich arbeite mit einer alten Legacy-Anwendung, die nach wie vor in Borland C ++ Builder kompiliert wird 5. Wir haben ein separates Projekt, um es zu ersetzen - ich bin gerade dabei Ende des Leben Wartung

.

Aktualisieren

Vier Monate später habe ich endlich aufgehört meinen Kopf kratzen ... es stellt sich heraus, dass das übergeordnete Formular für die Anwendung hatte eine Laufzeit OnShortCut Handler definiert. Ich brauche nur, dass deaktivieren für die Esc-Handler auf dem Kind Dialog zu arbeiten.

War es hilfreich?

Lösung

Sie sollten überprüfen, alle Möglichkeiten der Aufhebungs Ereignis blockiert werden könnte:

  1. Zunächst einmal überprüfen, ob die Taste tatsächlich abbrechen, klicken Sie das Formular geschlossen wird.

  2. Dann prüfen, ob eine andere Taste seine Cancel-Eigenschaft auf true gesetzt hat.

  3. Danach alle wichtigen Event-Handler überprüfen, nicht zu vergessen die Event-Handler von der Form, vor allem, wenn Sie KeyPreview aktiviert.

  4. Wenn Sie immer noch das Problem nicht finden, überprüfen Sie, ob eine weitere Komponente seiner Eigenschaft ShortCut hat stellen Sie die Escape-Taste zu behandeln.

  5. Überprüfen Sie auch, ob es irgendwelche Tastatur Haken aktiv sind.

Andere Tipps

Es kann sein, dass das KeyPreview-Eigenschaft des Formulars auf true gesetzt wurde. Dies ist, wo die Escape-Taste oft / wahrscheinlich ist deaktiviert wurde. Die KeyPreview Eigenschaft wird oft auch eher zum nächsten Feld zu erfassen [Return] -Taste drücken (d OnKeyPress) aktiviert als das Formular zu schließen.

Sie können auch einen anderen Dialog erstellen, fügen hinein Abbrechen-Taste und sehen, ob die Escape-Taste funktioniert. Dann vergleichen Sie die DFM Quelle beiden Formen und überprüfen Sie die Unterschiede in den Einstellungen.

Gibt es ein „CanClose“ Ereignis vom Typ mit Logik es vor der Schließung zu verhindern?

Beachten Sie auch, dass der Dialog über ShowModal aufgerufen werden muss () und nicht nur anzeigen (). Zum Beispiel, wenn Ihr Formular „FAskDialog“ genannt wird dann der Code, zeigt es sollte wie

sein

FAskDialog-> ShowModal ();

statt

FAskDialog-> Show ();

Wenn der Dialog über Fragen () aufgerufen wird, dann wird eine Löschtaste drücken oder Einstellung ModalResult = mrCancel wird der Dialog nicht dazu führen, zu schließen.

diese eine alte Frage ist, kann ich Antwort geben:

Sie müssen KeyPreview = True und dann schreiben Code zum Abfangen der ESC-Taste eingestellt werden:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top