代码之家  ›  专栏  ›  技术社区  ›  Chris

用户界面问题-控制控制状态和焦点

  •  0
  • Chris  · 技术社区  · 15 年前

    我在开发.NET Windows窗体应用程序时遇到了一些困难。这个问题与在控件之间切换焦点以及如何保持窗体控件的状态有关。

    ui_“两个组合框和一个按钮中有三个主要控件。

    • 两个组合框都以 SelectedItem = null .
    • 两个组合框都有一组可以选择的显式有效选项。
    • 两个组合框都使用 AutoCompleteMode.SuggestAppend AutoCompleteSource 设置为 AutoCompleteSource.ListItems . 这意味着用户可以输入组合框,并弹出建议供选择。
    • ComboBox 1始终处于启用状态。
    • 除非在组合框1中选择了特定值,否则将禁用组合框2。
    • 该按钮仅在以下情况下启用:
      • 已从“始终启用”组合框中选择有效值。
      • 已从第二个组合框中选择有效值 敌我识别 在第一个组合框中选择了一个特定值。否则,它的值将被忽略。
      • 在所有其他情况下,它是禁用的。

    问题在于键盘导航和控制焦点,以及它们如何与维护 Enabled 各种控件的状态。

    简而言之,在为组合框选择值时,在运行启用/禁用控件的逻辑之前,按Tab键(为组合框进行选择)将焦点放在窗体上的下一个控件上(按TabIndex顺序)。

    启用/禁用控件的逻辑发生在关联组合框的验证/验证事件中。

    最终的结果是,一个控件在获得焦点后可以被禁用。

    例如:

    1. 仅启用组合框1。组合框2和按钮被禁用。所有组合框的SelectedItem都设置为空。
    2. 将焦点设置为组合框1。
    3. 为框键入有效选项的前几个字母。
    4. 按标签。

    当我按Tab键时,在SelectedItem更改之前,焦点似乎被赋予下一个控件。在更改SelectedItem之前,无法运行启用或禁用其他UI控件的业务逻辑。

    理想情况下,我想要的是另一种方法:在更新ui控件的selecteditem之后,焦点应该转移,因此更新控件状态的逻辑已经运行。

    有人对我该怎么做有什么建议吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   dbkk    15 年前

    你能明确地改变焦点吗 SelectedIndexChanged / SelectedValueChanged 对于适当的组合框?您可能希望检查焦点当前在哪里,并且仅当焦点位于禁用的控件上时才进行移动。