我在开发.NET Windows窗体应用程序时遇到了一些困难。这个问题与在控件之间切换焦点以及如何保持窗体控件的状态有关。
ui_“两个组合框和一个按钮中有三个主要控件。
-
两个组合框都以
SelectedItem = null
.
-
两个组合框都有一组可以选择的显式有效选项。
-
两个组合框都使用
AutoCompleteMode.SuggestAppend
与
AutoCompleteSource
设置为
AutoCompleteSource.ListItems
. 这意味着用户可以输入组合框,并弹出建议供选择。
-
ComboBox 1始终处于启用状态。
-
除非在组合框1中选择了特定值,否则将禁用组合框2。
-
该按钮仅在以下情况下启用:
-
已从“始终启用”组合框中选择有效值。
-
已从第二个组合框中选择有效值
敌我识别
在第一个组合框中选择了一个特定值。否则,它的值将被忽略。
-
在所有其他情况下,它是禁用的。
问题在于键盘导航和控制焦点,以及它们如何与维护
Enabled
各种控件的状态。
简而言之,在为组合框选择值时,在运行启用/禁用控件的逻辑之前,按Tab键(为组合框进行选择)将焦点放在窗体上的下一个控件上(按TabIndex顺序)。
启用/禁用控件的逻辑发生在关联组合框的验证/验证事件中。
最终的结果是,一个控件在获得焦点后可以被禁用。
例如:
-
仅启用组合框1。组合框2和按钮被禁用。所有组合框的SelectedItem都设置为空。
-
将焦点设置为组合框1。
-
为框键入有效选项的前几个字母。
-
按标签。
当我按Tab键时,在SelectedItem更改之前,焦点似乎被赋予下一个控件。在更改SelectedItem之前,无法运行启用或禁用其他UI控件的业务逻辑。
理想情况下,我想要的是另一种方法:在更新ui控件的selecteditem之后,焦点应该转移,因此更新控件状态的逻辑已经运行。
有人对我该怎么做有什么建议吗?