12. november 1999 - 09:43Der er
7 kommentarer og 1 løsning
Runtime - OnExit - ActiveControl
Jeg har et stort problem i mine applikationer:
Jeg bruger meget OnExit til at kontrollere indtastningen i et felt, men afhængig af hvilket komponent brugeren trykker på er jeg / er jeg ikke interesseret i at validere indholdet.
Eks. Når brugeren trykker på Cancel er jeg ligeglad med hvad der blev indtastet i et felt fordi funktionen jo netop afbrydes, men hvis brugeren trykker på OK, eller blot "tabber" sig ud af feltet, er jeg MEGET interesseret i at validere indholdet.
Da jeg samtidig bruger ikke at have bestemte knapper aktive, som f.eks. OK, før indholdet af et eller flere felter er ok, er det ofte sådan at næste logiske komponent i rækken netop er cancelknappen. Hvis jeg i OnExit derfor tester på "activecontrol" og der konstaterer at dette er Cancel vil jeg ikke validere indholdet. Men fordi det var en "Tab" ud af feltet vil jeg naturligvis validere indholdet alligevel.
Dette er er paradox jeg ofte bruger meget kode på at komme uden om og afte må jeg gå på kompromis og forlange at brugeren indtaster noget korrekt i et felt selvom hav ønsker at forlade funktionen, før han kommer ud af feltet.
Det der mangler (og som jeg har brug for) er en indikation af følgende:
I OnExit vil jeg gerne vide hvordan et felt forlades: Er der med TAB eller er det ved at brugeren med musen (eller en hotkey) har trykket på et andet komponent.
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
procedure TForm1.Edit1Exit(Sender: TObject); begin if Form1.ActiveControl = btnCancel then ShowMessage('Valgt Cancel') else if Form1.ActiveControl = btnOK then ShowMessage('Valgt OK') else ShowMessage('Valgt noget andet'); end;
Når man i en onexit event tester på activecontrol er det selvfølgelig værdien af det komponent der får focus efter exit, og når dette er cancel vil jeg gerne afbryde. MEN.. når næste logiske komponent i rækkefølgen er Cancel (fordi OK ikke er aktivt før indholdet af den komponent man er ved at exitte) så vil jeg selvfølgelig ikke afbryde men derimod validere indholdet.
Så jeg erkender at jeg vil blæse og have mel i munden samtidig.
Så spørgsmålet er stadig: Hvordan finder jeg ud af i en OnExit hvordan jeg forlader komponenten: Med tab eller ved et musetryk/hotkey på en anden komponent.
Gusse> Undskyld den lange svartid. Jeg har været optaget af andre gøremål, men nu kan jeg lige kommentere din kommentar.
Ideen er umiddelbar god nok, men set med mine øjne kun når man laver data-entry rutiner. I et interaktivt miljø skal brugeren umiddelbart når han har indtastes noget, have at vide om det er ok. F.eks. hvis det er et kundenr, så undersøger appl. om kunden findes og viser f.eks. navn/adr eller saldo o.lign., INDEN brugeren begynder at udfylde evt. andre felter. Hvis kunden ikke findes skal brugeren have det at vide med en fejlmeddelelse.
Hvis man venter med det til alle felterne er udfyldt, og f.eks. kunden ikke findes, eller visse betingelser på kunden ikke er opfyldt og man derfor ikke kan udføre det man vil, vil man med dit forslag have udfyldt alle relevante felter til ingen nytte. Det er ikke brugervenligt nok til mig.
Jeg vil give brugeren besked så snart som muligt.
"Det kan du da stadig. Du validerer da bare igen når brugeren trykker på OM" kunne du så sige og det har du ret i, men at udføre de samme kald/valideringer igen er ikke en holdbar løsning. Mange af brugerne er forbundet via sløve linier (frame relay) og det tar tid nok i forvejen.
Så ideen er holdbar på nogle områder, men langt fra alle de områder jeg har behov for.
Det er bare et hurtigt forslag, men kunnne man ikke bare lave en klasse med en attribut som blev sat på komponentens onactivate event ? så ville der altid stå hvad der var aktiv sidst. man kunne også lave en tstringlist i klassen i stedet for en string så kunne man følge hele forløbet af tryk. Dette ville også virke hvis man tabber sig væk og der er noget andet der kommer i fokus, så kan man blot læse i stringlisten hvad der var aktivt før der blev tabbet væk.
Gartner76> ideen er ikke helt ringe, men dels betyder det vel at der skal oprettes nye klasser for alle de typer komponenter der kan forekomme formen (og som kan have fokus) og dels er det ikke lige behovet for at vide hvilket felt der sidst var aktivt, der er problemet. (det har jeg faktisk et andet spørgsmål om men det er allerede besvaret). Det er behovet for at vide hvordan et felt forlades (tilrådighed i feltets onexit event) jeg har behov for.
Tak for deltagelsen og kommentarene, men desværre var der ikke noget brug- og/eller holdbart
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.