SetFocus 函式
適用於: 畫布應用 模型驅動應用
將輸入焦點移至特定的控制項。
Description
SetFocus 函式讓控制項成為輸入焦點。 接著該控制項會收到使用者的擊鍵,允許他們在文字輸入控制項中鍵入或使用 Enter 鍵選取按鈕。 使用者也可以使用 Tab 鍵、觸控筆、滑鼠或其他筆勢自行移動輸入焦點。 Tab 鍵行為由 TabIndex 屬性控制。
使用 SetFocus 函式設定焦點 (每個請參閱下列範例):
- 新揭開或啟用的輸入控制項引導使用者進入下一步和快速資料輸入。
- 驗證表單時會聚焦和顯示討厭的輸入控制項,以快速解決問題。
- 畫面隨即顯示,聚焦第一個輸入控制項 Screen 的 OnVisible 屬性。
具有焦點的控制項可能會根據 FocusedBorderColor和 FocusedBorderThickness 屬性而有不同的視覺效果。
限制
SetFocus 只能與以下各項一起使用:
您無法將焦點設定至 Gallery 控制項的控制項、Edit form 控制項或 元件 。 SetFocus 可以與可滾動螢幕中的控制件一起使用。
您不能將焦點設為Container控制項內的控制項。
您只能將焦點設定至與包含 SetFocus 呼叫的公式相同畫面上的控制項。
嘗試將焦點設定至其 DisplayMode 屬性設為 Disabled 的控制項不會有任何影響。 焦點會保留在先前的位置。
在 Apple iOS 上,只有在直接使用者動作啟動 SetFocus 時,才會自動顯示螢幕小鍵盤。 例如,從按鈕的 OnSelect 屬性中進行呼叫時,會在從畫面的 OnVisible 進行喚醒呼叫時顯示軟鍵盤。
您只能在 行為公式 中使用 SetFocus。
語法
SetFocus( 控制件 )
- Control(控制) –必需。 要給予輸入焦點的控制項。
範例
焦點放在最新公開或啟用的輸入控制項上
許多購物車允許客戶使用運送位址做為帳單位址,所以您需要輸入兩次相同的資訊。 如果想要不同的帳單位址,則會啟用帳單位址文字方塊,並將其引導至可讓使用者使用這些新啟用的控制項,以便快速輸入資料。
這裡有許多要播放的公式,但是移動焦點的是在 Check box 控制項的 OnUncheck 屬性上:
SetFocus( BillingName )
也可以使用 Tab 鍵從一個欄位快速地將焦點移至另一個欄位。 若要更好地闡釋,動畫中不會使用 Tab 鍵。
若要建立此範例:
- 建立新的應用程式。
- 新增帶有文字「出貨地址」、「名稱:」、「地址:」、「帳單位址」、「名稱:」及「地址:」的 Label controls 控制項,並將它們定位為動畫中顯示的位置。
- 新增 Text Input 控制項,並將其重新命名為 ShippingName。
- 新增 Text Input 控制項,並將其重新命名為 ShippingAddress。
- 新增 Check box 控制項 ,並將它重新命名為 SyncAddresses。
- 將此控制項的 Text 屬性設定為
"Use Shipping address as Billing address"
公式。 - 新增 Text Input 控制項,並將其重新命名為 BillingName。
- 將此控制項的 Default 屬性設定為
ShippingName
公式。 - 將此控制項的 DisplayMode 屬性設定為
If( SyncAddresses.Value, DisplayMode.View, DisplayMode.Edit )
公式。 這會根據檢查方塊控制項的狀態自動啟用或停用此控制項。 - 新增 Text Input 控制項,並將其重新命名為 BillingAddress。
- 將此控制項的 Default 屬性設定為
ShippingAddress
公式。 - 將此控制項的 DisplayMode 屬性設定為
If( SyncAddresses.Value, DisplayMode.View, DisplayMode.Edit )
公式。 這會根據檢查方塊控制項的狀態自動啟用或停用此控制項。 - 將此檢查方塊的 Default 屬性設定為
true
公式。 這會預設帳單位址使用與送貨位址相同的值。 - 將此檢查方塊的 OnCheck 屬性設定為
Reset( BillingName ); Reset( BillingAddress )
公式。 如果使用者選擇同步處理運費和帳單地址,這將會清除帳單地址欄位中的任何使用者輸入,允許每個使用者的 Default 屬性從對應的送貨地址欄位中提取值。 - 將此檢查方塊的 OnUncheck 屬性設定為
SetFocus( BillingName )
公式。 如果使用者選擇使用不同的帳單地址,這會將焦點移至帳單地址中的第一個控制項。 因為控制項的 DisplayMode 屬性,所以控制項已經被啟用。
聚焦於驗證問題
Note
雖然此範例看起來像是 Edit form 控制項,但是該控制項尚不支援此控制項的 SetFocus。 相反地,此範例使用可捲動畫面控制項來承載輸入控制項。
驗證表單時,不僅在發生問題時才會顯示訊息,也有助於讓使用者進入發生衝突的欄位。 如果問題欄位是捲出畫面而看不到,它就會非常有用。
在此動畫中,會重複按鍵驗證按鈕,直到所有欄位都已正確填入為止。 請注意,滑鼠指標不會從畫面控制項頂端向下移動。 而 SetFocus 函式已將輸入焦點移至需要注意此公式的控制項:
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 )
)
若要建立此範例:
- 建立新的空白手機應用程式。
- 從 Insert 功能表選取 New screen,然後選取 Scrollable。
- 在畫面的中部區段中,新增 Text input控制項並將它們命名為 Name、Street1、Street2、City、County、StateProvince、PostalCode 和 Phone。 在每個控制項上方新增 Label 控制項,以找出欄位。 如果區段的時間不夠,無法容納所有控制項,您可能需要調整區段的大小。
- 在畫面上方的可捲動區段上方,新增檢查記號的 Icon 控制項。
- 將圖示控制項的 OnSelect 屬性設為以下公式
If( IsBlank( ...
。
顯示畫面時的焦點
Note
雖然此範例看起來像是 Edit form 控制項,但是該控制項尚不支援此控制項的 SetFocus。 相反地,此範例使用可捲動畫面控制項來承載輸入控制項。
與公開輸入控制項類似,顯示資料輸入畫面時,將第一個輸入控制項集中於更快速資料輸入是非常實用的。
在此動畫中,左邊的資料輸入畫面不使用 SetFocus。 當顯示時無輸入控制項具有焦點時,要求使用者使用索引標籤鍵、觸摸、滑鼠或使用其他方式在 Name 欄位具有焦點,才能在其中輸入值。
在右邊,我們有與資料輸入畫面的 OnVisible 屬性設定為設為此公式的相同應用程式:
SetFocus( Name )
這會自動將焦點設定至 Name 欄位。 使用者可以開始輸入並在欄位之間進行切換,立即不需執行先前的動作。
若要建立此範例:
- 建立以上的「專注於驗證問題」應用程式。
- 在此畫面上,將此 OnVisible 屬性設定為
SetFocus( Name )
公式。 - 新增第二畫面控制項。
- 新增 Button control。
- 將此控制項的 OnSelect 屬性設定為
Navigate( Screen1 )
公式。 - 從此畫面預覽應用程式。 請按此按鈕。 OnVisible 公式將會進行評估,而 Name 欄位會自動成為焦點。