Del via


SetFocus-funksjon

Gjelder: 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. Tab-tastvirkemåten styres av TabIndex-egenskapen.

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:

Du kan ikke sette fokus på kontroller som er i Gallery-kontrollen, Edit form-kontrollen eller Component. SetFocus kan brukes med en kontroll i et rullbart skjermbilde.

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( Control )

  • Control – obligatorisk. 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.

Animasjon for bruk av egendefinert faktureringsadresse, med fokus flyttet til inndatakontrollen for faktureringsnavn, og der automatisk synkronisering med leveringsadresse deaktiveres.

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:

  1. Opprett en ny app.
  2. Legg til Label-kontroller med teksten "Leveringsadresse", "Navn:", "Adresse:", "Faktureringsadresse", "Navn:", og "Adresse:", og plasser dem som vist i animasjonen.
  3. Legg til en Text Input-kontroll, og gi den navnet ShippingName.
  4. Legg til en Text Input-kontroll, og gi den navnet ShippingAddress.
  5. Legg til en Check box-kontroll, og endre navnet til SyncAddresses.
  6. Sett Text-egenskapen for denne kontrollen til formelen "Use Shipping address as Billing address".
  7. Legg til en Text Input-kontroll, og gi den navnet BillingName.
  8. Sett Default-egenskapen for denne kontrollen til formelen ShippingName.
  9. 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.
  10. Legg til en Text Input-kontroll, og gi den navnet BillingAddress.
  11. Sett Default-egenskapen for denne kontrollen til formelen ShippingAddress.
  12. 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.
  13. Sett Default-egenskapen for avmerkingsboksen til formelen true. Dette fører til at faktureringsadressen bruker samme verdi som leveringsadressen.
  14. 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.
  15. 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.

Animasjon av validering av et dataoppføringsskjema som viser en melding i tillegg til å sette inndatafokus på den avvikende inndatakontrollen, selv om den er rullet ut av skjermen.

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:

  1. Opprett en ny tom telefonapp.
  2. Fra Sett inn-menyen velger du Ny skjerm, og deretter velger du Kan rulles.
  3. 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.
  4. Legg til en merke Icon-kontroll øverst på skjermen, over den rullbare delen.
  5. 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.

En animasjon som viser en side-ved-side-sammenligning av bruk av SetFocus kontra å ikke bruke den når et dataregistreringsskjermbilde vises.

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:

  1. Opprett appen "Fokus på valideringsproblemer" ovenfor.
  2. På denne skjermen setter du OnVisible-egenskapen til formelen SetFocus( Name ).
  3. Legg til et nytt skjermbilde.
  4. Legg til en Button-kontroll.
  5. Sett OnSelect-egenskapen for denne kontrollen til formelen Navigate( Screen1 ).
  6. Forhåndsvis appen fra denne skjermen. Trykk på knappen. OnVisible-formelen evalueres, og Name-feltet vil automatisk være i fokus.