Compartir por


Función SetFocus

Aplícase a: Aplicacións de lenzo Aplicacións baseadas en modelos

Move o foco de entrada a un control específico.

Descripción

A función SetFocus dá a un control o foco de entrada. A continuación, os golpes de teclas do usuario son recibidas por ese control, permitíndolle introducir un control de entrada de texto ou usar a tecla Intro para seleccionar un botón. O usuario tamén pode usar a tecla tabulador, a funcionalidade táctil, o rato ou outro xesto para mover os focos de entrada. O comportamento da tecla tabuladorestá rexido pola propiedade TabIndex.

Use a función SetFocus para establecer o foco cando (cada un cun exemplo a continuación):

  • un control de entrada recentemente exposto ou habilitado, para orientar o usuario no que vén e para unha entrada de datos máis rápida.
  • un formulario valídase para enfocar e amosar o control de entrada infractor para unha resolución rápida.
  • móstrase unha pantalla para enfocar o primeiro control de entrada coa propiedade OnVisible da Pantalla.

O control con foco pode ser visualmente diferente en función das propiedades FocusedBorderColore FocusedBorderThickness.

Limitacións

SetFocus só se pode utilizar con:

Non pode establecer o foco nos controis que están dentro dun control Galería , Editar formulario control ou Compoñente. SetFocus pódese usar cun control nunha pantalla que se pode desprazar.

Non pode establecer o foco nos controis que están dentro dun control de Contedor.

Só pode establecer o foco en controis na mesma pantalla que a fórmula que contén a chamada SetFocus.

Tentar fixar o foco nun control que ten a súa propiedade DisplayMode establecida en Desactivado non ten efecto. O foco permanecerá onde estaba anteriormente.

En Apple iOS, o teclado programado só se mostrará automaticamente se SetFocus se iniciou mediante unha acción directa do usuario. Por exemplo, invocando dende a propiedade OnSelect dun botón amosará o teclado suave, mentres que invocando desde OnVisible dunha pantalla, non.

Só pode usar SetFocus en fórmulas de comportamento.

Sintaxe

SetFocus( Control )

  • Control – Obrigatorio. O control para dar o foco de entrada.

Exemplos

Concéntrase nun control de entrada recentemente exposto ou habilitado

Moitos carros da compra permiten que o cliente use o enderezo de envío como enderezo de facturación, aliviando a necesidade de introducir a mesma información dúas veces. Se se desexa un enderezo de facturación diferente, as caixas de entrada de texto do enderezo de facturación están habilitadas e é útil guiar ao cliente a estes controis recentemente activados para a entrada de datos máis rápida.

Animación para escoller usar un enderezo de facturación personalizado, co enfoque trasladado ao control de entrada do nome de facturación como resultado, desactivando a sincronización automática co enderezo de envío.

Hai moitas fórmulas en xogo aquí, pero a que move o foco está na propiedade OnUncheck do control de Caixa de verificación:

SetFocus( BillingName )

A tecla tabulador tamén se pode usar para mover o foco rapidamente dun campo a outro. Para ilustrar mellor, a tecla tabulador non se usou na animación.

Para crear este exemplo:

  1. Cree unha nova aplicación.
  2. Engada controis de etiqueta co texto "Enderezo de envío", "Nome:", "Enderezo:", "Enderezo de facturación", "Nome:" e "Enderezo:" e colóqueos como se mostra na animación.
  3. Engada un control de entrada de texto e despois cámbielle o nome a ShippingName.
  4. Engada un control de entrada de texto e despois cámbielle o nome a ShippingAddress.
  5. Engada un control de Caixa de verificación e cámbieo a SyncAddresses.
  6. Axuste a propiedade Texto deste control na fórmula "Use Shipping address as Billing address".
  7. Engada un control de entrada de texto e despois cámbielle o nome a BillingName.
  8. Axuste a propiedade Por defecto deste control na fórmula ShippingName.
  9. Axuste a propiedade DisplayMode deste control na fórmula If( SyncAddresses.Value, DisplayMode.View, DisplayMode.Edit ). Isto habilitará ou desactivará automaticamente este control en función do estado do control das caixas de verificación.
  10. Engada un control de entrada de texto e despois cámbielle o nome a BillingAddress.
  11. Axuste a propiedade Por defecto deste control na fórmula ShippingAddress.
  12. Axuste a propiedade DisplayMode deste control na fórmula If( SyncAddresses.Value, DisplayMode.View, DisplayMode.Edit ). Isto habilitará ou desactivará automaticamente este control en función do estado do control das caixas de verificación.
  13. Axuste a propiedade Por defecto da caixa de verificación na fórmula true. Isto predefinirá que o enderezo de facturación use o mesmo valor que o enderezo de envío.
  14. Axuste a propiedade OnCheck da caixa de verificación na fórmula Reset( BillingName ); Reset( BillingAddress ). Se o usuario opta por sincronizar os enderezos de envío e facturación, limparase calquera entrada do usuario nos campos de enderezo de facturación e permitirase que as propiedades Por defecto de cada un extraian os valores dos campos de enderezo correspondentes.
  15. Axuste a propiedade OnUncheck da caixa de verificación na fórmula SetFocus( BillingName ). Se o usuario opta por ter un enderezo de facturación diferente, isto trasladará o foco ao primeiro control no enderezo de facturación. Os controis xa estarán habilitados debido ás súas propiedades de DisplayMode.

Enfoque nos problemas de validación

Nota

Aínda que este exemplo parece ser un control de Editar formulario, desafortunadamente SetFocus aínda non é admitido por ese control. Pola contra, este exemplo usa unha pantalla desprazable para aloxar os controis de entrada.

Ao validar un formulario, pode resultar útil non só mostrar unha mensaxe se hai algún problema, senón tamén levar ao usuario ao campo infractor. Pode resultar especialmente útil se o campo en cuestión se despraza pola pantalla e non se ve.

Unha animación de validación dun formulario de entrada de datos e que non só mostre unha mensaxe, senón que tamén fixe o foco de entrada no control de entrada infractor, aínda que se desprace fóra da pantalla.

Nesta animación presionase repetidamente o botón de validación ata que se enchen correctamente todos os campos. Teña en conta que o punteiro do rato non se baixa desde a parte superior da pantalla. No seu lugar, a función SetFocus moveu o foco de entrada ao control que require atención con esta fórmula:

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

Para crear este exemplo:

  1. Cree unha nova aplicación de teléfono en branco.
  2. No menú Inserir, seleccione Nova pantalla e logo seccione Desprazable.
  3. Na sección central da pantalla, engada os controis de Entrada de texto e denomíneos Name, Street1, Street2, City, County, StateProvince, PostalCode e Phone. Engada controis de Etiqueta por enriba de cada un para identificar os campos. Pode que necesite redimensionar a sección se non é o suficiente longa para encaixar todos os controis.
  4. Engada un control de icona de marca de verificación na parte superior da pantalla, por enriba da sección desprazable.
  5. Estableza a propiedade OnSelect do control da icona na fórmula If( IsBlank( ... dada anteriormente.

Foco ao mostrar unha pantalla

Nota

Aínda que este exemplo parece ser un control de Editar formulario, desafortunadamente SetFocus aínda non é admitido por ese control. Pola contra, este exemplo usa unha pantalla desprazable para aloxar os controis de entrada.

De xeito similar a expoñer un control de entrada, cando se visualiza unha pantalla de entrada de datos, é útil centrar o primeiro control de entrada para unha entrada de datos máis rápida.

Unha animación que mostra unha comparación de lado a lado de usar SetFocus fronte a non usala cando se visualiza unha pantalla de entrada de datos.

Nesta animación, a pantalla de entrada de datos da esquerda non usa SetFocus. Cando se mostra, ningún control de entrada ten o foco, o que require que o usuario use o tabulador, a funcionalidade táctil, o rato ou outro medio para concentrarse no campo Nome antes de que se poida escribir un valor nel.

Na dereita, temos exactamente a mesma aplicación coa propiedade OnVisible da pantalla de entrada de datos axustada nesta fórmula:

SetFocus( Name )

Isto centra o foco no campo Nome automaticamente. O usuario pode comezar a escribir e usar o tabulador entre campos inmediatamente sen necesidade de acción previa.

Para crear este exemplo:

  1. Cree a aplicación "Foco nos problemas de validación" anterior.
  2. Nesta pantalla, axuste a propiedade OnVisible deste control na fórmula SetFocus( Name ).
  3. Engada unha segunda pantalla.
  4. Engada un control de botón.
  5. Axuste a propiedade OnSelect deste control na fórmula Navigate( Screen1 ).
  6. Vista previa da aplicación desde esta pantalla. Prema o botón. A fórmula OnVisible avaliarase e o campo Nome estará automaticamente no foco.