焦點與Tab順序


 

焦點與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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM