焦點與Tab順序
在可視化程序設計中,焦點(focus)是一個十分重要的概念。下面詳細介紹一下如何設置焦點,以及窗體上控件的Tab順序。
1 設置焦點
簡單地說,焦點是接收用戶鼠標或鍵盤輸入的能力。當一個對象具有焦點時,它可以接收用戶的輸入。在Windows系統中,某個時刻可以運行多個應用程序,但是只用具有焦點的應用程序才有活動標題欄,能夠接收用戶的輸入。類似地,在含有多個文本框的窗體中,只有具有焦點的文本框才能接受用戶的輸入。
當對象得到焦點時,會觸發GotFocus事件;當對象失去焦點時,將觸發LostFocus事件,前面文本框的例題中已經見過這方面的例子。LostFocus事件過程通常用來對更新進行確認和有效性檢查,也可用於修正或改變在GotFocus事件過程中設立的條件。窗體和多數控件支持這些事件。
可以用下面的方法設置一個對象的焦點:
l 在運行時單擊該對象
l 運行時用熱鍵選擇該對象
l 在程序代碼中用SetFocus方法
l 利用Tab鍵將焦點移動到該對象上
焦點只能移到可視的窗體或控件上,因此,只有當一個對象的Enabled和Visible屬性均為True時,它才能接收焦點。Enabled屬性允許對象響應由用戶產生的事件,如鍵盤和鼠標事件,而Visible屬性決定了對象是否可見。
注意,並不是所有對象都可以接收焦點。某些控件,包括框架(Frame)、標簽(Label)、菜單(Menu)、直線(Line)、形狀(Shape)、圖像框(Image)和計時器(Timer)都不能接收焦點。對於窗體來說,只有當窗體上的任何控件都不能接收焦點時,該窗體才能接收焦點。
對於大多數可以接收焦點的控件來說,從外觀上可以看出它是否具有焦點。例如,當命令按鈕、復選框、單選按鈕等控件具有焦點時,在其內側有一個虛線框,如圖2-36所示。當文本框具有焦點時,在文本框內有閃爍的插入光標。
如前所述,可以通過SetFocus方法設置焦點。但是應當注意,由於在窗體的Load事件完成前,窗體或窗體上的控件是不可視的,因此,不能直接在Form_Load事件過程中,用SetFocus方法把焦點移到正在裝入的窗體或窗體上的控件。必須先用Show方法顯示窗體,然后才能對該窗體或窗體上的控件設置焦點。例如,對於圖2-36所示窗體,編寫如下事件過程:
Private Sub Form_Load()
Command2.SetFocus
End Sub
程序設計者的原意是在程序開始運行后,直接把焦點移到Command2上,但是不能達到目的。程序運行后,顯示出錯信息,如圖2-37所示。
為了解決這個問題,必須在這支焦點前世窗體可視,這可以通過Show方法來實現。上面的程序應該為:
Private Sub Form_Load()
Form1.Show
Command2.SetFocus
End Sub
2 Tab順序
當窗體上有多個控件時,用鼠標單擊某個控件,就可把焦點移到該控件上(假設該控件可以獲得焦點)。除鼠標外,用Tab鍵也可以把焦點移到某個控件上。每按一次Tab鍵,焦點便從一個控件移到另一個控件。所謂Tab順序,就是指按下Tab鍵時,焦點在各個控件之間移動的順序。
在一般情況下,Tab順序由控件建立時的先后順序確定。例如,假定在窗體上建立了5個控件,其中3個文本框,兩個命令按鈕,建立順序為:
Text1、Text2、Text3、Command1、Command2
程序執行時,光標默認地位於Text1中,每按一次Tab鍵,焦點就按Text2、Text3、Command1、Command2的順序移動。當焦點位於Command2時,如果按Tab鍵,則焦點又回到Text1。如前所述,除計時器、菜單、框架、標簽等不接收焦點的控件外,其他控件均支持Tab順序。
可以獲得焦點的控件都有一種稱為“TabStop”的屬性,用它可以控制焦點的移動。該屬性的缺省值為True,如果把它設置為False,則在用Tab鍵移動焦點時會跳過該控件。TabStop屬性為False的控件,仍然保持它在實際的Tab順序中的位置,只不過在按Tab鍵時這個控件被跳過。
在設計模式下,可以通過屬性窗口中的TabIndex屬性來改變Tab順序。在前面的例子中,如果把Command2的TabIndex由4改為0,把Text1的TabIndex由0改為1,把Text2的TabIndex由1改為2,把Text3的TabIndex由2改為3,把Command1的TabIndex由3改為4。則程序運行時Tab順序變為Command2 →Text1→Text2→Text3→Command1。
不能獲得焦點的控件以及無效的和不可見的控件,不具有TabIndex屬性,因而不包含在Tab順序中,按Tab鍵時,這樣的控件將被跳過。
本文轉自
http://wenku.baidu.com/view/ba7dfdd180eb6294dd886c77.html