2011-06-06 59 views
0

WinForms:我不想要任何Tab鍵順序。我希望自己能夠以編程方式處理窗體上的所有Tab選項,並使用我需要的一些邏輯。 如何完全禁用Tab鍵順序?我假設之後,我應該處理每個控制的KeyDown事件或一些類似的事件......完全禁用表單上的TabOrder

回答

3

你需要重寫表單的ProcessCmdKey()方法。測試keydata == Keys.Tab和(Keys.Shift | Keys.Tab)以分別檢測向前和向後選項卡。返回true表示你已經使用了密鑰,不應該再使用它。這會打敗Tab鍵的Winforms默認處理。不需要對控件進行其他更改。

窗體的ActiveControl屬性告訴你哪個控件當前有焦點,你需要用它來確定下一個應該集中哪個控件。請注意,它在技術上可以爲空。注意嵌入在容器控件中的控件,如Panel或UserControl。做這個工作肯定是不愉快的,也很難維護。只有在表單上的控件數量有限的情況下才能執行此操作。

+0

啊,我並不知道向前和向後標籤。是的,我有很多這些嵌入式控件(分離器,面板,activeX)。 – Bohn 2011-06-07 14:55:53

1

一種方法是將TabStop屬性中的每個控件的形式設置爲false。這將防止Tab鍵爲控件提供焦點。

如果您不想爲每個控件(例如在設計視圖中)手動執行此操作,則可以創建一個方法來遍歷表單的Controls集合中的所有控件,並在每個控件上設置屬性,然後從窗體的構造函數中調用它。

2

阿德里安說,由製表位設置爲false,您可以禁用它 這樣的功能可以是有用到魔鬼所有的製表位

private void DiableTabStop(Control ctrl) 
{ 
    ctrl.TabStop = false; 
    foreach (Control item in ctrl.Controls) 
    { 
     DiableTabStop(item); 
    } 
} 

,並在窗體加載調用它

DiableTabStop(this); 
-1

除了禁用頁框的製表位,正如您所提到的,您想要控制哪個「製表符」處於活動狀態。您可以在您的「WhichTab」表單上顯示自定義屬性。然後,覆蓋點擊事件並檢查傳入的發件人/事件頁面是否是另一頁面的頁面...無論如何,強制回到您正在控制設置的「WhichTab」...準備好激活所述頁面,告訴選項卡控制對象以激活新頁面以顯示給用戶。