SetFocus

SetFocus

SetFocus,對指定的窗口設置鍵盤焦點。該窗口必須與調用線程的消息隊列相關。

函數介紹


函數原型:HWND SetFocus(HWND hWnd)。
參數:
hWnd:接收鍵盤輸入的窗口指針。若該參數為NULL,則擊鍵被忽略。
返回值:若函數調用成功,則返回原先擁有鍵盤焦點的窗口句柄。若hWnd參數無效或窗口未與調用線程的消息隊列相關,則返回值為NULL。若想要獲得更多錯誤信息,可以調用GetLastError函數。
備註:SetFocus函數發送WM_KILLFOCUS消息到失去鍵盤焦點的窗口,並且發送WM_SETFOCUS消息到接受鍵盤焦點的窗口。它也激活接受鍵盤焦點的窗口或接受鍵盤焦點的窗口的父窗口。
若一個窗口是活動的,但沒有鍵盤焦點,則任何按鍵將會產生WM_SYSCHAR,WM_SYSKEYDOWN或WM_SYSKEYUP消息。若VK_MENU鍵也被按下,則消息的IParam參數將設置第30位。否則,所產生的消息將不設置此位。
使用AttachThreadInput函數,一個線程可將輸入處理連接到其他線程。這使得線程可以調用SetFocus函數為一個與其他線程的消息隊列相關的窗口設置鍵盤焦點。
Windows CE:不使用SetFocus函數為一個與其他線程的消息隊列相關的窗口設置鍵盤焦點。但有一個例外。若一個線程的窗口是另一線程的子窗口,或這些窗口是具有同一父窗口的兄弟窗口,則與一個線程關聯的窗口可以為其他窗口設置焦點,儘管該窗口屬於一個不同的線程。在這種情況下,就不必先調用AttachThreadlnpUt函數。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:1.0及以上版;頭文件:winuser.h;庫文件:user32.lib。
理論結合實例來演示一下:(網站的登陸後台自動獲取焦點實例)
如果網站的登陸後台有設置獲取焦點的功能的話,那麼登陸後台的時候就可以不用滑鼠點擊文本框游標就會自動定位到文本框里,當然後台登陸頁面沒有這一獲取焦點的功能的話,那麼就需要網站管理員登陸的時候用滑鼠放在文本框旁邊點一下然後游標才放定位到你所需要的文本框裡面,兩者相比之下,細心的朋友肯定會覺得前者使用起來更方便實用,更人性化,那麼自動將游標定位到文本框里的功能是如何實現的,請看下面的代碼
第一步:先定義SetFocus函數,如下,注意SetFocus函數必須包含在javascript腳本之內
通過以上的代碼測試你可以發現,不用滑鼠游標就會自動定位到文本框里,不過這裡有幾點是需要值的注意的:
第一:表單控制項比如文本框必須包含在表單之內,否則無效
第二:表單名與表單控制項比如文本框的名稱大小需要統一,在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 控制項
29.TreeView 控制項
30.updown 控制項
31.Window 對象