SetFocus-funksjon
Gjelder for: Lerretsapper Modelldrevne apper
Flytter inndatafokus til en bestemt kontroll.
Description
SetFocus-funksjonen gir en kontroll inndatafokuset. Brukerens tastetrykk blir deretter mottatt av denne kontrollen, slik at de kan skrive inn i en text-input-kontroll eller bruke Enter-tasten til å velge en knapp. Brukeren kan også bruke Tab-tasten, berøring, mus eller andre bevegelser til å flytte selve inndatafokuset. Virkemåten for tabulatortasten styres av egenskapen TabIndex .
Bruk SetFocus-funksjonen til å sette fokus når (hvert med et eksempel nedenfor):
- en nylig eksponert eller aktivert inndatakontroll, for å veilede brukeren i det neste som kommer, og for raskere dataregistrering.
- et skjema valideres, for å fokusere og vise den avvikende inndatakontrollen for hurtigløsing.
- et skjermbilde vises, for å fokusere den første inndatakontrollen med OnVisible-egenskapen for Skjerm.
Kontrollen med fokus kan være visuelt forskjellig basert på egenskapene FocusedBorderColor og FocusedBorderThickness.
Begrensninger
SetFocus kan bare brukes med:
- Knapp kontroll
- Ikon kontroll
- Bilde kontroll
- Kontroll av etiketter
- TextInput-kontroll
Du kan ikke sette fokus på kontroller som er i Gallery-kontrollen, Edit form-kontrollen eller Component. SetFocus kan brukes med en kontroll på en rullbar skjerm.
Du kan ikke angi fokus for kontroller som er i en Container-kontroll.
Du kan bare sette fokus til kontrollene på samme skjermbilde som formelen som inneholder SetFocus-kallet.
Hvis du prøver å sette fokus på en kontroll som har egenskapen DisplayMode satt til Deaktivert, har det ingen innvirkning. Fokus blir værende der det var tidligere.
I Apple iOS vises bare det nedlastbare tastaturet automatisk hvis SetFocus ble startet av en direkte brukerhandling. Hvis du for eksempel aktiverer fra en knapps OnSelect-egenskap, vises det myke tastaturet når du aktiverer fra en skjerms OnVisible.
Du kan bare bruke SetFocus i formler for virkemåte.
Syntaks
SetFocus( kontroll )
- Kontroll – Påkrevd. Kontrollen for å gi inndata fokus.
Eksempler
Fokuser på en nylig eksponert eller aktivert inndatakontroll
Mange handlekurver gjør det mulig for kunden å bruke leveringsadressen som faktureringsadresse, og dette reduserer behovet for å skrive inn samme informasjon to ganger. Hvis du vil ha en annen faktureringsadresse, aktiveres inndataboksene for faktureringsadresse, og det er nyttig å lede kunden til de nylig aktiverte kontrollene for raskere dataregistrering.
Det er mange formler i spill her, men den som flytter fokus, er på OnUncheck-egenskapen for Check box-kontrollen:
SetFocus( BillingName )
Tab-tasten kan også brukes til å flytte fokus raskt fra ett felt til et annet. Tab-tasten ble ikke brukt i animasjonen, for å illustrere på en bedre måte.
Slik oppretter du dette eksemplet:
- Opprett en ny app.
- Legg til Label-kontroller med teksten "Leveringsadresse", "Navn:", "Adresse:", "Faktureringsadresse", "Navn:", og "Adresse:", og plasser dem som vist i animasjonen.
- Legg til en Text Input-kontroll, og gi den navnet ShippingName.
- Legg til en Text Input-kontroll, og gi den navnet ShippingAddress.
- Legg til en Check box-kontroll, og endre navnet til SyncAddresses.
- Sett Text-egenskapen for denne kontrollen til formelen
"Use Shipping address as Billing address"
. - Legg til en Text Input-kontroll, og gi den navnet BillingName.
- Sett Default-egenskapen for denne kontrollen til formelen
ShippingName
. - Sett DisplayMode-egenskapen for denne kontrollen til formelen
If( SyncAddresses.Value, DisplayMode.View, DisplayMode.Edit )
. Det fører til at denne kontrollen aktiveres eller deaktiveres automatisk basert på tilstanden til avmerkingsbokskontrollen. - Legg til en Text Input-kontroll, og gi den navnet BillingAddress.
- Sett Default-egenskapen for denne kontrollen til formelen
ShippingAddress
. - Sett DisplayMode-egenskapen for denne kontrollen til formelen
If( SyncAddresses.Value, DisplayMode.View, DisplayMode.Edit )
. Det fører til at denne kontrollen aktiveres eller deaktiveres automatisk basert på tilstanden til avmerkingsbokskontrollen. - Sett Default-egenskapen for avmerkingsboksen til formelen
true
. Dette fører til at faktureringsadressen bruker samme verdi som leveringsadressen. - Sett OnCheck-egenskapen for avmerkingsboksen til formelen
Reset( BillingName ); Reset( BillingAddress )
. Hvis brukeren velger å synkronisere leverings- og faktureringsadressene, vil dette fjerne alle brukerinndata i faktureringsadressefeltene som tillater at Default-egenskapene for hver av dem hentes fra tilsvarende leveringsadressefelt. - Sett OnUncheck-egenskapen for avmerkingsboksen til formelen
SetFocus( BillingName )
. Hvis brukeren velger å ha en annen faktureringsadresse, vil dette flytte fokus til den første kontrollen i faktureringsadressen. Kontrollene er allerede aktivert på grunn av deres DisplayMode-egenskaper.
Fokus på valideringsproblemer
Merk
Selv om dette eksemplet ser ut til å være en Edit form-kontroll, støttes dessverre ikke SetFocus ennå av denne kontrollen. Dette eksemplet bruker i stedet en rulleskjerm til å være vert for inndatakontrollene.
Under validering av et skjema kan det være nyttig å ikke bare vise en melding hvis det er et problem, men også å ta brukeren til feltet som avviker. Det kan være spesielt nyttig hvis det gjeldende feltet ruller bort fra skjermen og ikke vises.
I denne animasjonen trykkes valideringsknappen gjentatte ganger helt til alle feltene er fylt ut på riktig måte. Vær oppmerksom på at musepekeren ikke flyttes ned fra toppen av skjermen. I stedet har SetFocus-funksjonen flyttet inndatafokuset til kontrollen som krever oppmerksomhet, ved hjelp av denne formelen:
If( IsBlank( Name ),
Notify( "Name requires a value", Error ); SetFocus( Name ),
IsBlank( Street1 ),
Notify( "Street Address 1 requires a value", Error ); SetFocus( Street1 ),
IsBlank( Street2 ),
Notify( "Street Address 2 requires a value", Error ); SetFocus( Street2 ),
IsBlank( City ),
Notify( "City requires a value", Error ); SetFocus( City ),
IsBlank( County ),
Notify( "County requires a value", Error ); SetFocus( County ),
IsBlank( StateProvince ),
Notify( "State or Province requires a value", Error ); SetFocus( StateProvince ),
IsBlank( PostalCode ),
Notify( "Postal Code requires a value", Error ); SetFocus( PostalCode ),
IsBlank( Phone ),
Notify( "Contact Phone requires a value", Error ); SetFocus( Phone ),
Notify( "Form is Complete", Success )
)
Slik oppretter du dette eksemplet:
- Opprett en ny tom telefonapp.
- Fra Sett inn-menyen velger du Ny skjerm, og deretter velger du Kan rulles.
- I den midtre delen på skjermen legger du til Text input-kontroller og gir dem navnet Name, Street1, Street2, City, County, StateProvince, PostalCode og Phone. Legg til Label-kontroller over hver av dem for å identifisere feltene. Det kan hende du må endre størrelsen på delen hvis den ikke er lang nok for å få plass til alle kontrollene.
- Legg til en merke Icon-kontroll øverst på skjermen, over den rullbare delen.
- Sett OnSelect-egenskapen for ikonkontrollen til formelen
If( IsBlank( ...
som er gitt over.
Fokusere når du viser et skjermbilde
Merk
Selv om dette eksemplet ser ut til å være en Edit form-kontroll, støttes dessverre ikke SetFocus ennå av denne kontrollen. Dette eksemplet bruker i stedet en rulleskjerm til å være vert for inndatakontrollene.
På samme måte som når du viser en inndataregistrering, kan du fokusere på den første inndatakontrollen for å få raskere dataregistrering når du viser et dataregistreringsskjermbilde.
I denne animasjonen bruker ikke dataregistreringsskjermbildet til venstre SetFocus. Ved visning har ingen inndatakontroll fokus, noe som krever at brukeren velger tabulator, berøring, mus eller en annen metode for å fokusere på Navn-feltet før en verdi kan skrives inn i det.
Til høyre har vi nøyaktig samme app med OnVisible-egenskapen for dataoppføringsskjermen angitt til denne formelen:
SetFocus( Name )
Dette setter fokus på Navn-feltet automatisk. Brukeren kan begynne å skrive og bruke tabulator mellom felt umiddelbart uten å utføre noen handlinger først.
Slik oppretter du dette eksemplet:
- Opprett appen "Fokus på valideringsproblemer" ovenfor.
- På denne skjermen setter du OnVisible-egenskapen til formelen
SetFocus( Name )
. - Legg til et nytt skjermbilde.
- Legg til en Button-kontroll.
- Sett OnSelect-egenskapen for denne kontrollen til formelen
Navigate( Screen1 )
. - Forhåndsvis appen fra denne skjermen. Trykk på knappen. OnVisible-formelen evalueres, og Name-feltet vil automatisk være i fokus.