Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OnExit wird beim Drücken von <Return> nicht aufgerufen (https://www.delphipraxis.net/165932-onexit-wird-beim-druecken-von-return-nicht-aufgerufen.html)

marcibaer 22. Jan 2012 15:17

OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Hallo zusammen!

Warum wird die OnExit-Procedure eines Edits nicht aufgerufen, wenn die <Return>-Taste drücke und somit der OK-Button (mit Einstellung Default=true) den Focus erhält und dessen OnClick-Procedure ausgeführt wird?
Klicke ich dagegen auf den OK-Button, wird die OnExit-Procedure ausgeführt!
Beide Male verliert das Edit-Feld doch den Focus!

Vielen Dank für Eure Hilfe.

jaenicke 22. Jan 2012 15:45

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Zitat:

Zitat von marcibaer (Beitrag 1147121)
wenn die <Return>-Taste drücke und somit der OK-Button (mit Einstellung Default=true) den Focus erhält

Das ist bei dir dann ein Grafikfehler, wenn es so aussieht als würde der Fokus wechseln.
Bei mir behält das Editfeld korrekt den Fokus, wenn durch die Enter-Taste der Button ausgelöst wird und das wird auch korrekt so dargestellt. (Warum sollte dabei auch der Fokus wechseln?)

Mit Turbo Delphi wie in deinem Profil steht kann ich diesen Grafikfehler genauso wenig reproduzieren wie mit Delphi XE2. Mit welcher Delphiversion und welchem Betriebssystem passiert das denn bei dir?

marcibaer 22. Jan 2012 16:33

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Ich arbeite z.Zt. noch - wie beschrieben - mit Turbo Delphi unter WinXP.

Vielleicht ist meine Annahme, dass das Edit-Feld beim Drücken von <Return> den Focus verliert, der Fehler. Wenn das so gewollt ist, stellt sich für mich die Frage, wie ich das in diesem Fall "korrigieren" kann!?

Das OnExit des Edits im OnClick des Buttons aufzurufen dürfte nicht die Lösung sein, da beim Klicken auf den Ok-Button das Ganze ja u.U. 2x aufgerufen werden würde - einmal bei Focus-Verlust des Edits UND im OnClick.

Andere Alternativen?

jaenicke 22. Jan 2012 16:41

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Zitat:

Zitat von marcibaer (Beitrag 1147135)
Das OnExit des Edits im OnClick des Buttons aufzurufen dürfte nicht die Lösung sein

Natürlich nicht. Aber die dahinterliegende Logik schon. Und das eben nur, wenn das Editfeld noch den Fokus hat.
Delphi-Quellcode:
procedure DoSomething;
begin

end;

procedure TfrmSomething.btnStartClick(Sender: TObject);
begin
  if edtSomething.Focused then
    DoSomething;
end;

procedure TfrmSomething.edtSomethingExit(Sender: TObject);
begin
  DoSomething;
end;
Ob die Logik insgesamt so sinnvoll ist, musst du selbst wissen.

Sir Rufo 22. Jan 2012 17:55

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Warum so kompliziert?

Einfach im OnClick des Burtons den Focus auf den selbigen setzen lassen, dann hat man genau die Reaktion, als ob man auf den Button klicken würde ;)

marcibaer 23. Jan 2012 19:59

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Das klappt soweit ganz gut!

Allerdings kriege ich Probleme, wenn in der OnExit-Procedure Tests vorgenommen werden und 'ne Sicherheitsabfrage erscheint. Wird die Sicherheitsabfrage bejahrt, so erhält das Edit wieder den Focus - aus der OnOkClick funktioniert das natürlich nicht, da die OnExit keinen Wert zurück liefert und der Dialog geschlossen wird - muss ich wohl 'nen Flag im Dialog setzten - oder gibt's da Alternativen?

himitsu 23. Jan 2012 20:19

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Du hast nicht etwa beim Button, im IO, etwas bei ModalResult angegeben?

Wenn ja, dann ist das der Fehler.
Setz dieses besser im Erfolgsfall manuell im OnClick des Buttons.

BUG 26. Jan 2012 20:38

AW: OnExit wird beim Drücken von <Return> nicht aufgerufen
 
Was mir sauberer vorkommt:
Lagere das Überprüfen der Editinhalte in eine extra Methode auf, die du in OnExit und in ButtonClick aufrufst.
Sind die im ButtonClick Werte korrekt, führe die eigentliche Aufgabe des Buttons durch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz