個人理解:WinForm中Focus()和TabIndex

http://www.cnblogs.com/jaywingod/archive/2008/01/26/1054314.html

    最近在做一個WinForm的項目,發現一些問題,還是與WebForm有較大的不同。由於我對UI的東西不是很熟,所以在一些簡單的問題上,遇到不少的麻煩,其中一個就是控件的Focus()方法和TabIndex屬性。
    首先我們來看一下$對TabIndex的解釋。
    針對WebForm的解釋:

C#
public virtual short TabIndex { get; set; }

屬性值

Web 服務器控件的選項卡索引。默認值爲 0,表示未設置此屬性。
異常類型 條件

ArgumentOutOfRangeException

指定的選項卡索引不在 -32768 和 32767 之間。

使用 TabIndex 屬性指定或確定 Web 窗體頁上 Web 服務器控件的選項卡索引。當按 Tab 鍵時,Web 服務器控件接收焦點的順序由每個控件的 TabIndex 屬性確定。當最初加載頁時,按 Tab 鍵時接收焦點的第一項是地址欄。然後,Web 窗體頁上控件的 Tab 鍵順序根據每個控件的 TabIndex 屬性值,從最小的非零正值開始按升序排列。如果多個控件共享同一選項卡索引,則這些控件將按它們在 Web 窗體頁上的聲明順序接收焦點。最後,具有零選項卡索引的控件的 Tab 鍵順序按它們的聲明順序排列。

Note注意

只有具有非零選項卡索引的控件才呈現 tabindex 屬性。

通過將 TabIndex 屬性設置爲負值,可以從 Tab 鍵順序中移除 Web 服務器控件。

    當時一個負責UI的同事告訴我,TabIndex從1開始,設置爲0,將無效,併發了這篇文章給我看。但是由於我在試驗的過程中發現,設置爲0的控件首先獲得焦點,所以就抱着懷疑的態度看完了這篇文章,再仔細一看,才發現在這個是WebControl的接受,於是我接着搜,發現下面的介紹:

Tab 鍵索引較低的控件將先於 Tab 鍵索引較高的控件接收焦點。

    沒有對0作特殊的說明。
   
    通過觀察,我個人得出以下結論:

    在WinForm中,TabIndex
與“層”有關,假如有兩個panel,panel1(裏面有txtName,txtPassword)和Panel2(txtAddress,txtunit),那麼,TabIndex的順序是這樣的。
首先在最外層(panel)選取index最小的控件,然後把光標定位到該panel中tabindex最小的控件上。這貌似在MSDN上沒有提到。
        =============================================
    Focus()方法的用法。
    最開始,我在Form_Load()方法中設置this.txtName.Focus(),但是顯示出來的結果不如人所願,查MSDN,並沒有什麼發現, 於是試了好多中組合(與TabIndex),以爲是父子控件的問題,通過試驗發現,在Form_Load中這樣寫,可以實現設置焦點的功能:
this.txtName.Focus();
this.txtName.tabIndex = 0;
以爲自己有了一個偉大的發現,但是,經過幾次的試驗,發現有時行,有時不行……難道有什麼魔咒?
經過幾番的試驗,得出一個結論。(其實不知道正確與否)

關於Focus():
    “研究發現”,該方法並沒有魔咒,也不是$的Bug,主要與他的使用位置有關。在http://www.cnblogs.com/michaellee /archive/2008/01/25/1053366.html中,提到,控件的Focus()與enable和visible有關,在 Form_Load中,該控件的visible屬性不一定爲true,所以,這個時候設置focus()不能成功。因此,要實現Focus(),可以這 樣:
1、像剛纔那篇文章的作者提到的,在Form_Load中這樣寫:
this.Show();
this.txtName.Focus();
但是我覺得這樣的做法不是特別好,因爲我們知道,在Form_Load事件之後,還有很多事件發生,我覺得在這些事件中設置焦點更好。
在Activated方法中實現:
this.txtName.Focus();
======================================================
    以上的一些觀點和方法,只代表個人目前的淺薄認識,不保證正確,記在這裏,供個人日後思考,也爲感興趣的朋友提供一個思考問題的方面,僅此而已。
======================================================
發佈了65 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章