函式介紹
函式原型:HWND SetFocus(HWND hWnd)。
參數:
hWnd:接收鍵盤輸入的視窗
指針。若該參數為NULL,則擊鍵被忽略。
返回值:若
函式調用成功,則返回原先擁有鍵盤焦點的
視窗句柄。若hWnd參數無效或視窗未與調用執行緒的訊息佇列相關,則返回值為NULL。若想要獲得更多錯誤信息,可以調用GetLastError函式。
備註:SetFocus函式傳送WM_KILLFOCUS訊息到失去鍵盤焦點的視窗,並且傳送WM_SETFOCUS訊息到接受鍵盤焦點的視窗。它也激活接受鍵盤焦點的視窗或接受鍵盤焦點的視窗的父視窗。
若一個視窗是活動的,但沒有鍵盤焦點,則任何按鍵將會產生WM_SYSCHAR,WM_SYSKEYDOWN或WM_SYSKEYUP訊息。若VK_MENU鍵也被按下,則訊息的IParam參數將設定第30位。否則,所產生的訊息將不設定此位。
Windows CE:不使用SetFocus函式為一個與其他執行緒的訊息佇列相關的視窗設定鍵盤焦點。但有一個例外。若一個執行緒的視窗是另一執行緒的子視窗,或這些視窗是具有同一父視窗的兄弟視窗,則與一個執行緒關聯的視窗可以為其他視窗設定焦點,儘管該視窗屬於一個不同的執行緒。在這種情況下,就不必先調用AttachThreadlnpUt函式。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:1.0及以上版;頭檔案:winuser.h;庫檔案:user32.lib。
理論結合實例來演示一下:(網站的登入後台自動獲取焦點實例)
如果網站的登入後台有設定獲取焦點的功能的話,那么登入後台的時候就可以不用滑鼠點擊文本框
游標就會自動定位到文本框裡,當然後台登入頁面沒有這一獲取焦點的功能的話,那么就需要網站管理員登入的時候用滑鼠放在文本框旁邊點一下然後游標才放定位到你所需要的文本框裡面,兩者相比之下,細心的朋友肯定會覺得前者使用起來更方便實用,更人性化,那么自動將游標定位到文本框裡的功能是如何實現的,請看下面的代碼
第一步:先定義SetFocus函式,如下,注意SetFocus函式必須包含在javascript腳本之內
<script type="text/javascript">
function SetFocus()
{
if (document.Login.UserName.value=="")//如果Login
表單的名為UserName的文本框的值為空
document.Login.UserName.focus();//那么將此文本框設定焦點,也就是將
游標定位此文本框裡,等待用戶輸入用戶名
else
document.Login.UserName.select();
}
</script>
<form name="Login"><input name="UserName" type="text"></form>
<script type="text/javascript">
SetFocus();//調用SetFocus函式
</script>
通過以上的代碼測試你可以發現,不用滑鼠游標就會自動定位到文本框裡,不過這裡有幾點是需要值的注意的:
第二:表單名與表單控制項比如文本框的名稱大小需要統一,在javascript客戶端腳本中是區分大小寫的,如果SetFocus函式內的表單名或表單元素的名稱是大寫,而Form表單的代碼中的名稱如果是小寫的話,那么SetFocus函式也將無效
Flash方法
[pre]public static setFocus(newFocus:
Object) : Boolean
使 newFocus 參數指定的可選擇(可編輯)文本欄位、按鈕或影片剪輯獲得焦點。如果傳遞 null 或 undefined,則刪除當前焦點。
可用性
ActionScript 1.0、Flash Player 5 , 按鈕和影片剪輯的實例名稱僅在 Flash Player 6 及更高版本中有效。
參數
newFocus:
Object ― 一個對象(例如,某個按鈕、影片剪輯或文本欄位實例),或者是一個字元串,該字元串指定某個按鈕、影片剪輯或文本欄位實例的路徑。如果您傳遞指定路徑的字元串,請將該路徑置於引號內 (" ")。可以使用點或斜槓記號指定路徑。如果要使用 ActionScript 2.0,則必須使用點符號表示。可以使用相對路徑或絕對路徑。
返回
Boolean ― 一個布爾值;如果獲得焦點成功,則為 true;如果失敗,則為 false。
示例
在下面的示例中,當文本欄位在瀏覽器視窗中運行時,它將在 username_txt 文本欄位上獲得焦點。如果用戶未填寫某個必需文本欄位(username_txt 和 password_txt),則游標將自動將焦點定位在缺少數據的文本欄位中。例如,如果用戶未在 username_txt 文本欄位中鍵入任何內容,則在單擊姨嶠揮按鈕時,將出現一條錯誤訊息,而且游標在 username_txt 文本欄位中獲得焦點。
[pre]this.createTextField("status_txt", this.getNextHighestDepth(), 100, 70, 100, 22);this.createTextField("username_txt", this.getNextHighestDepth(), 100, 100, 100, 22);this.createTextField("password_txt", this.getNextHighestDepth(), 100, 130, 100, 22);this.createEmptyMovieClip("submit_mc", this.getNextHighestDepth());submit_mc.createTextField("submit_txt", this.getNextHighestDepth(), 100, 160, 100, 22);submit_mc.submit_txt.autoSize = "center";submit_mc.submit_txt.text = "Submit";submit_mc.submit_txt.border = true;submit_mc.onRelease = checkForm;username_txt.border = true;password_txt.border = true;username_txt.type = "input";password_txt.type = "input";password_txt.password = true;Selection.setFocus("username_txt");//function checkForm():Boolean {if (username_txt.text.length == 0) {status_txt.text = "fill in username";Selection.setFocus("username_txt");return false;}if (password_txt.text.length == 0) {status_txt.text = "fill in password";Selection.setFocus("password_txt");return false;}status_txt.text = "success!";Selection.setFocus(null);return true;}
此示例中使用的 MovieClip.getNextHighestDepth() 方法要求 Flash Player 7 或更高版本。如果您的 SWF 檔案包括第 2 版的組件,請使用第 2 版組件的 DepthManager 類代替 MovieClip.getNextHighestDepth() 方法。
VB方法
將焦點移至指定的控制項或窗體。
語法
object.SetFocus
object 所在處代表對象表達式,其值是“套用於”列表中的一個對象。
說明
對象必須是 Form 對象、MDIForm 對象或者能夠接收焦點的控制項。調用 SetFocus 方法以後,任何的用戶輸入將指向指定的窗體或控制項。
焦點只能移到可視的窗體或控制項。因為在窗體的 Load 事件完成前窗體或窗體上的控制項是不可視的,所以如果不是在 Form_Load 事件過程完成之前首先使用 Show 方法顯示窗體的話,是不能使用 SetFocus 方法將焦點移至正在自己的 Load 事件中載入的窗體的。
也不能把焦點移到 Enabled 屬性被設定為 False 的窗體或控制項。如果已在設計時將 Enabled 屬性設定為 False,必須在使用 SetFocus 方法使其接收焦點前將 Enabled 屬性設定為 True。
可使用SetFocus的部分控制項
1.MDI窗體。
2.窗體
3.ADODATA 控制項
4.Animation 控制項
5.CheckBox 控制項
6.ComboBox 控制項
7.CommandButton 控制項
8.所有數據(Data)控制項
9.DateTimePicker 控制項
10.DirListBox 控制項
11.DriveListBox 控制項
12.FileListBox 控制項
13.HScrollBar 、VScrollbar 控制項
14.FlatScrollbar 控制項
15.ListBox 和 ListView 控制項
16.TextBox 控制項
17.Imagecombo 控制項
18.Masked Edit 控制項
19.OLE 容器控制項
20.MSFlexGrid 和 MSHFlexGrid 控制項(別把兩個控制項混一起了)
21.OptionButton 控制項
22.PictureBox 控制項
23. 屬性頁對象(Property Page )
24.RichTextBox 控制項
25.Silder 控制項
26. 用戶自定義控制項對象 (UserControl )
27.ActiveX 文檔 (UserDocument)
28.TabStrip 控制項