2009-10-07 120 views

回答

4

您可以在控制自身使用.Focus(),或撥打頁面的SetFocus(),傳遞到控制的參考。請注意,您需要傳入控件,而不是ID,因爲這似乎不受支持(至少從.NET 3.5開始)。有關更多信息,請參閱MSDN Page.SetFocus

至於方法之間的區別?它們在很大程度上是可以互換的,並且您應該根據您訪問的對象調用更方便的方法 - 通常在控件上調用.Focus()更容易。請參閱MSDN上的How to Set Focus on ASP.NET Web Server Controls

1

控件具有可以調用將焦點設置到控制的聚焦()方法。

txtUserName.Focus(); 

另外,該頁面具有SetFocus的()方法,該方法它可以是一個控制對象或要焦點設置到控制的ID。

this.Page.SetFocus(txtUserName); 

this.Page.SetFocus(txtUserName.ClientID); 
+0

兩者功能相同嗎? – 2009-10-07 20:22:31

+0

@NoviceDeveloper - 在查看源代碼後,答案是肯定的,它們具有相同的功能。 – BornToCode 2016-03-31 12:52:30

3

根據您希望您的工作流程是怎麼樣,或者你的規格是什麼,你有兩個選擇:

  1. 設定:如果從服務器端。像John提到的那樣,您可以使用UI控件可用的Focus()方法。當頁面在瀏覽器中呈現時,這會將焦點應用於控件。但是,由於用戶與頁面上的其他元素進行交互,您將會失去它。

  2. 使用JavaScript將其設置在客戶端。這將爲您提供更大的靈活性,因爲您可以基於用戶交互應用焦點。 要將重點放在客戶端,可以使用DOM(文檔對象模型)。您需要獲取對該控件的引用,然後您可以調用focus()方法:

    document.getElementById(txtUserName).focus();

也就是說,如果控件的ID(因爲它在客戶端註冊)是txtUserName。根據頁面的佈局,這種情況不太可能發生,如果您更改佈局,則可能會遇到麻煩,所以這不是最佳做法。

一個好的做法是註冊一個JavaScript變量,其目的是保存控件的客戶端ID,因爲它將呈現在HTML中。 您可以通過使用ClientScriptManager類實現這一點:

ClientScript.RegisterClientScriptBlock(this.GetType(), "setFocus", "var focusFieldId = '" + txtUserName.ClientID + "';", true); 

,然後在客戶端,你可以說

document.getElementById(focusFieldId).focus(); 

你可以重構這個成例如稱爲setUserNameFocus()方法,然後調用該方法無論你想要什麼客戶端事件。例如,一種流行的做法是當用戶點擊頁面上的某個位置時,將注意力集中在某個字段上。比如你的HTML元素body可能是這樣的,如果你不希望永遠失去焦點爲你的元素:

<body onload="setUserNameFocus();" onclick="setUserNameFocus();"> 
+0

到ClientScriptManager的鏈接是錯誤的。它指向過時的API。試圖編輯答案時出現錯誤。我稍後會嘗試對其進行編輯。與此同時,鏈接到正確的引用是這樣的: http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.aspx – 2009-10-07 21:01:02

0

有一個簡單的方法來此。

在Visual Studio中,將下面的Page_Load事件......

Page.Form.DefaultFocus = TextBox1.ClientID; 

Page.Form.DefaultButton = Button1.UniqueID; 

請註明的 「回答」,如果回答你的問題。