Page 1 of 2 1 2 LastLast
Results 1 to 15 of 19

Thread: TEdit onexit

  1. #1
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509

    TEdit onexit

    (Delphi Rio, FMX)

    Ik wil valideren of een TEdit een correcte .Text heeft als ik de OnExit aanroep
    Het valideren gaat prima, maar als de validatie mislukt, zou ik graag een melding zien ( lukt, geen probleem ), maar ook dat de focus weer op de TEdit terug komt ( in de OnExit is de focus al verplaatst ).
    Een Edit1.Setfocus werkt niet.
    Dan maar eens een F1 gedaan op TEdit en daar bij de events geklikt naar OnExit.

    daar staat onder andere het volgende :

    Code:
    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      if Edit1.Text <> 'Hello' then
       Edit1.Abort;
    end;
    maar ..... een TEdit heeft helemaal geen Abort !

    Wat ga ik gebruiken om de focus op de Edit1 te houden ?
    Erik

  2. #2
    Abort werkt denk ik alleen op datasets.

    Edit1.SetFocus zou moeten werken.
    Anders zou je nog ActiveControl := Edit1; kunnen gebruiken.

    Ps. Let erop dat de OnExit van TEdit niet in alle gevallen getriggered wordt.
    (zie handleiding)

  3. #3
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    Setfocus werkt niet, het volgende lijkt te werken:

    Code:
    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      if Edit1.Text <> 'Hello' then
      begin
        ActiveControl := Edit1;
        Abort;
      end; 
    end;
    Erik

  4. #4

  5. #5
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    zonder Abort; gaat het niet en wordt de focus gewoon op de volgende component gelegd
    Erik

  6. #6
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Abort zorgt voor een (stille) exception waardoor de program flow wordt onderbroken; in deze context wordt de OnExit-event afgebroken en blijft de focus op de edit staan.
    TMemoryLeak.Create(Nil);

  7. #7
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    dat heb ik inmiddels ook gezien
    Erik

  8. #8
    Quote Originally Posted by VideoRipper View Post
    Abort zorgt voor een (stille) exception waardoor de program flow wordt onderbroken; in deze context wordt de OnExit-event afgebroken en blijft de focus op de edit staan.
    Ik heb het vermoeden dat er meer gebeurd. De onexit is sowieso al het laatste in de event chain van edit1 dus een abort als laatste statement zou verder niets doen voor de onexit-event. Maar omdat het een stille exception is kan het dus ook het begin van de volgende event (onenter van volgend control) tegenhouden.

    Ik had alleen niet verwacht dat dat nodig was geweest omdat bij de onexit de focus al veranderd en het zetten van activecontrol op een ander control voldoende zou zijn geweest. Blijkbaar had ik het mis.

  9. #9
    Edit: Nee. Ik had toch gelijk.

    Dit is voldoende.
    Delphi Code:
    1. procedure TForm41.Edit1Exit(Sender: TObject);
    2. begin
    3.   if Edit1.Text <> 'hello' then
    4.   begin
    5.     ActiveControl := Edit1;
    6.   end;
    7. end;

    Ik heb in een nieuw project 3 edit's gezet. En voor de eerste een OnExit aangemaakt zoals boven.
    Bij de OnExit blijft de focus gewoon op Edit1 staan. Dus een Abort is in dat geval NIET nodig.

    Ook de Edit1.SetFocus werkt in de OnExit goed.
    Het enige dat ik kan bedenken is dat er meer in de code staat die ervoor zorgt dat er na de OnExit nog iets met de focus gedaan wordt.

  10. #10
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    onder VCL werkt dat misschien, maar dit is FMX ( had ik in mijn eerste bericht al gezegd ), daar gaat ie zonder Abort gewoon naar de volgende component
    Erik

  11. #11
    Quote Originally Posted by ErikB View Post
    onder VCL werkt dat misschien, maar dit is FMX ( had ik in mijn eerste bericht al gezegd ), daar gaat ie zonder Abort gewoon naar de volgende component
    Oeps. Dat van FMX had ik inderdaad even gemist. Sorry.

  12. #12
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    na nog wat testen, de

    Activecontrol := Edit1;

    is zelfs helemaal niet nodig. uitsluitend een

    Abort;

    volstaat al
    Erik

  13. #13
    Dan zal in FMX de focus nog niet verschoven zijn naar de volgende control zoals bij VCL wel is. Vandaar dat Abort dan voldoende is en zonder Abort de rest van de afhandeling dus de ActiveControl zou veranderen en alleen SetFocus dus niet zou werken.

    VLC
    Activecontrol = Edit2 -> Edit1.OnExit -> Edit2.OnEnter

    FMX
    Edit1.OnExit -> ActiveControl = Edit2 -> Edit2.OnEnter

    Zo zie je dat bij VLC alleen een ActiveControl := Edit1 voldoende is
    En bij FMX alleen een Abort nodig is (omdat dan de rest ook overgeslagen wordt door de stille exception)


  14. #14
    Senior Member ErikB's Avatar
    Join Date
    Aug 2010
    Location
    Biddinghuizen
    Posts
    509
    weer wat geleerd, dank voor jullie hulp :-)
    Erik

  15. #15
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Fijn dat het is opgelost!

    En laat mij dan toch nog maar even diegene zijn die hierbij de gebruikelijke kanttekening plaatst: hoewel begrijpbaar is het een zeer onvriendelijke, onverstandige, ongebruikelijke, kortom onwenselijke user-interface interventie om een control de input focus te willen laten behouden bij foutieve invoer. Deze discussie is in het verleden al meerdere keren voorbij gekomen hier op NLDelphi, bijvoorbeeld hier, of hier, of hier.

    Nota bene de Windows user interface design guidelines waarschuwing hiervoor niet eens, maar nemen simpelweg aan dat de input focus de control verlaat, onder de kop Input validation and error handling.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •