我在開發.NET窗體表單應用時遇到了一些僵局。這個問題與控件之間的切換焦點有關,以及它如何在維護窗體控件的狀態方面發揮作用。用戶界面問題 - 控制控制狀態和焦點
UI中有三個主要控件 - 兩個組合框和一個按鈕。
- 這兩個組合框都以
SelectedItem = null
開頭。 - 這兩個組合框都有一組明確的有效選項可供選擇。
- 兩個組合框都使用
AutoCompleteMode.SuggestAppend
,而AutoCompleteSource
設置爲AutoCompleteSource.ListItems
。這意味着用戶可以輸入組合框並彈出建議值以供選擇。 - 組合框#1始終處於啓用狀態。
- ComboBox#2被禁用,除非在ComboBox#1中選擇了特定值。
- 一個有效的價值已經從啓用始終組合框中選擇:只有當
- 的按鈕被激活。
- 從第二個組合框中選擇了一個有效值IFF在第一個組合框中選擇了一個特定值。否則,其值將被忽略。
- 在所有其他情況下,它被禁用。
問題是與鍵盤的導航與控制重點做的,他們如何與保持各種控件的Enabled
狀態相關的邏輯一起玩。
簡而言之,當爲組合框選擇一個值時,按下TAB鍵(讓您選擇組合框)將焦點放到表單上的下一個控件(按照TabIndex順序),然後才能啓用邏輯/禁用控件運行。
啓用/禁用控件的邏輯發生在相關組合框的驗證/驗證事件中。
最終結果是一個控件可以被禁用後,它已被賦予焦點。
例如:
- 只有組合框#1被啓用。組合框#2和按鈕被禁用。所有ComboBox的SelectedItem都設置爲null。
- 將焦點設置爲ComboBox#1。
- 輸入框的有效選項的前幾個字母。
- 按Tab鍵。
當我按下TAB,看來的SelectedItem改變之前的重點是考慮到下一個控件。啓用或禁用其他UI控件的業務邏輯無法運行,直到SelectedItem被更改。
理想情況下,我想要的是另一種方式:焦點應該在UI控件的SelectedItem被更新後轉移,因此更新控件狀態的邏輯已經運行。
有沒有人有任何建議,我該怎麼做呢?
這聽起來像它幾乎是我需要的解決方案。只有一件事情讓我困擾,當我強制關注控件時,這就是控件的TabIndex。 看來我不得不在這裏做的是告訴.NET,我知道更好,這個控件需要集中。現在的問題是,如果使用鍵盤導航,如何區分按TAB和SHIFT + TAB的人?我只想移動焦點,如果他們沿禁用控件的方向導航UI。 – Chris 2009-12-22 23:11:37