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 SetFokus aber nur unter bestimmten Bedingungen (https://www.delphipraxis.net/214136-setfokus-aber-nur-unter-bestimmten-bedingungen.html)

TurboMagic 22. Nov 2023 18:50

SetFokus aber nur unter bestimmten Bedingungen
 
Hallo,

gegeben ist D11.3 und eine VCL Anwendung.
In einem Frame gibt es ein TEdit mit einem OnExit Event.

Dort wird der eingegebene Text an die Geschäftslogik übergeben.
Wird ein leerer Text eingegeben, führt das in der Geschäftslogik gewolltermaßen
zu einer Exception.

Die wird im OnExit abgefangen und ein Ballon Hint wird angezeigt.

Soweit so gut. Nun wollte ich aber verhindern, dass in dem Fall das Feld verlassen
werden kann. Naja, .SetFocus am betreffenden Edit ist schnell aufgerufen.

Aber: jetzt ist der Frame wo eingebettet wo es auch einen Abbrechen Button gibt.
In dem Fall soll ein leeres Eingabefeld jedoch nicht zum Problem werden.

=> wie bekomme ich .SetFokus nur dann aufgerufen, wenn die Ursache zum Verlassen
des Eingabefeldes nicht der Abbrechen Button war?
Ein Boolsches Flag, welches vom Abbrechen Button gesetzt wird funktioniert
natürlich nicht, da dessen OnClick Handler dann natürlich noch nicht gelaufen ist.

Grüße
TurboMagic

Harry Stahl 22. Nov 2023 20:02

AW: SetFokus aber nur unter bestimmten Bedingungen
 
Ich nehme mal an, du hast Deine Abbruch-Logik im Frame selber untergebracht.

Dann könntest Du das im OnExit-Event des Edits z.B. so machen:

Delphi-Quellcode:
 if (Screen.ActiveForm.ActiveControl <> NIL) then begin
    if (Screen.ActiveForm.ActiveControl is TButton)
    and ((Screen.ActiveForm.ActiveControl as TButton).Name = 'bnCancel')
    then begin
      exit;
    end;

    if edit1.Text = '' then begin
      ShowMessage ('Bite text eingeben');
      Edit1.SetFocus;
    end;

  end;
Damit wird auf Leer sein des Edits immer (nur dann) getestet, wenn das Active Control nicht bncancel ist.

TurboMagic 22. Nov 2023 20:41

AW: SetFokus aber nur unter bestimmten Bedingungen
 
Danke, dein Prinzip funktioniert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.

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