2009-12-21 111 views
0

我在開發.NET窗體表單應用時遇到了一些僵局。這個問題與控件之間的切換焦點有關,以及它如何在維護窗體控件的狀態方面發揮作用。用戶界面問題 - 控制控制狀態和焦點

UI中有三個主要控件 - 兩個組合框和一個按鈕。

  • 這兩個組合框都以SelectedItem = null開頭。
  • 這兩個組合框都有一組明確的有效選項可供選擇。
  • 兩個組合框都使用AutoCompleteMode.SuggestAppend,而AutoCompleteSource設置爲AutoCompleteSource.ListItems。這意味着用戶可以輸入組合框並彈出建議值以供選擇。
  • 組合框#1始終處於啓用狀態。
  • ComboBox#2被禁用,除非在ComboBox#1中選擇了特定值。
    • 一個有效的價值已經從啓用始終組合框中選擇:只有當
    • 的按鈕被激活。
    • 從第二個組合框中選擇了一個有效值IFF在第一個組合框中選擇了一個特定值。否則,其值將被忽略。
    • 在所有其他情況下,它被禁用。

問題是與鍵盤的導航與控制重點做的,他們如何與保持各種控件的Enabled狀態相關的邏輯一起玩。

簡而言之,當爲組合框選擇一個值時,按下TAB鍵(讓您選擇組合框)將焦點放到表單上的下一個控件(按照TabIndex順序),然​​後才能啓用邏輯/禁用控件運行。

啓用/禁用控件的邏輯發生在相關組合框的驗證/驗證事件中。

最終結果是一個控件可以被禁用後,它已被賦予焦點。

例如:

  1. 只有組合框#1被啓用。組合框#2和按鈕被禁用。所有ComboBox的SelectedItem都設置爲null。
  2. 將焦點設置爲ComboBox#1。
  3. 輸入框的有效選項的前幾個字母。
  4. 按Tab鍵。

當我按下TAB,看來的SelectedItem改變之前的重點是考慮到下一個控件。啓用或禁用其他UI控件的業務邏輯無法運行,直到SelectedItem被更改。

理想情況下,我想要的是另一種方式:焦點應該在UI控件的SelectedItem被更新後轉移,因此更新控件狀態的邏輯已經運行。

有沒有人有任何建議,我該怎麼做呢?

回答

0

您是否可以針對相應的組合框明確更改SelectedIndexChanged/SelectedValueChanged的焦點?您可能想要檢查當前焦點的位置,並且只有在焦點位於禁用的控件上時纔會移位。

+0

這聽起來像它幾乎是我需要的解決方案。只有一件事情讓我困擾,當我強制關注控件時,這就是控件的TabIndex。 看來我不得不在這裏做的是告訴.NET,我知道更好,這個控件需要集中。現在的問題是,如果使用鍵盤導航,如何區分按TAB和SHIFT + TAB的人?我只想移動焦點,如果他們沿禁用控件的方向導航UI。 – Chris 2009-12-22 23:11:37