WinForm控制項焦點的使用

來源:互聯網
上載者:User
文章目錄
  • 顯式指定某控制項擷取焦點
  • 指定預設焦點
  • 判斷哪個控制項獲得焦點

在C#的傳統型應用程式開發中,一般是一個頁面(Form),然后里面擺著很多個控制項(control).
所謂焦點就是你當前選中了哪個控制項,該控制項就獲得了焦點.比如你用滑鼠點下某個控制項,或者通過快速鍵選中某個控制項. 如果是可編輯的地區會有一個一閃閃的豎線在那,如果不可編輯的一般會有些高亮顯示.

 

焦點的用處是啥

焦點的概念不會在代碼中經常用到.但有兩個我們很熟悉的情境裡會常用到.

一個情境是,當我們在某個頁面填寫一堆註冊資訊,然後點提交.如果哪項沒填你就報個錯.然後呢就讓那個文本地區獲得焦點.這樣使用者就可以直接輸入內容,不需要再動下滑鼠點擊下獲得焦點再輸入.所以指定某個控制項獲得焦點可以方便使用者的操作.

二個情境是,你用visual studio時,點下F1這快速鍵就會彈出協助文檔.而且協助文檔中顯示的內容是跟你當前焦點所在的內容相關的.所以假如你要做一個產品,當使用者焦點在一些編輯地區的時候你想讓其點下F1也彈出相應協助文檔的話,就必須先判斷是哪個控制項獲得了焦點.

 

焦點的具體用法

 

顯式指定某控制項擷取焦點

假如有按鈕btnOK,  文字框txtLogin.則讓兩者獲得焦點的方法分別是調用btnOK.Focus(); 和 txtLogin.Focus();

其他控制項也一樣,調用下函數Focus()就ok了.

 

指定預設焦點

不過如果是一個頁面一開啟就要預設讓某個控制項獲得焦點的話,貌似用Focus()這方法不行.

得在那個控制項的屬性(properties)中指定TabIndex為0,這樣一開啟視窗(Form),此控制項就預設的獲得了焦點.你可能會問TabIndex是幹嘛的.我們會看到鍵盤左邊有個Tab鍵,我們按它的時候會選中不同的控制項,相當於不停的做切換. 而切換的順序就是按TabIndex指定數字大小來的.所以如果你指定TabIndex為0,就相當於是第一個.就是預設的獲得焦點了.

 

TabIndex值相同的特殊情況

但是每個控制項的TabIndex的值可以相同的.你可能會問如果兩控制項TabIndex值相等了咋辦的啊?

你憑經常覺得應該是值相同的話,排前面的應該獲得焦點.按從上到下,從左至右的順序.不過我試了下發現情況並非這樣簡單.假如從左至右有按鈕btn1, 文字框txt2,文字框txt3 . 假如它們的TabIndex依次為3, 2, 1.那沒問題,預設焦點就是TabIndex為1的txt3. 如果依次為3, 2, 2.因為txt2排前面,所以txt2獲得焦點.

但如果三者的TabIndex都為3,情況就奇怪了.你可能覺得會是btn1獲得焦點,因為它排最前面啊,但答案是錯的.那好吧,應該是txt2,它排第2啊.可惜也不是.竟然是預設獲得焦點的是txt3.而如果沒有txt3的話,不管txt2的位置在哪都是txt2獲得焦點.所以貌似是可編輯的控制項獲得焦點的優先順序高於不可編輯控制項.而如果相同優先順序的話,當TabIndex相同時就選最後一個獲得焦點.

當然預設情況所有控制項TabIndex的值是不會相等的,你往視窗中拖第一個控制項時TabIndex值是0,然後每增加一個控制項,TabIndex就預設增加1.只要你自己手動去改TabIndex時才會可能改成一樣.所以如果要手動改的話最後也別改成一樣.要每個控制項唯一才比較好.

 

判斷哪個控制項獲得焦點

 

比如上面的情景2,如果你點F1快速鍵時怎麼判斷當前是哪個控制項獲得焦點呢.有兩種方法

一是遍曆下頁面(Form)裡面的所有控制項,然後做判斷

foreach(  Control con in this.Controls)

{

  if(con.Focused)             //如果某個控制項獲得焦點,則其Focused值為true

     //do something

}

 

另外還有個更簡單的辦法

Control con = this.ActiveControl;       //顯然這個方法更簡單.

 

當然你可能會問,上面雖然得到一個獲得焦點的Control,但我貌似還不知道是哪一個具體的控制項啊,比如一個TextBox或Button啊.我們知道每個控制項都有一個唯一的名字.你應該事Crowdsourced Security Testing道每個控制項的名字的,然後通過if(con.Name == "txt1") 這樣來判斷是哪個控制項. 然後再做轉換.比如TextBox txt  = (TextBox) con;

當然如果你不想去知道具體是哪一個控制項,只要知道控制項類型就行了.那就這樣 TextBox txt = con as TextBox; 如果轉換成功了(即txt != null),那獲得焦點的就為TextBox,如果不成功接著再轉唄. 比如 Button btn = con as Button;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.