在开发.NET Windows窗体应用程序时,我遇到了一些僵局。问题与在控件之间切换焦点以及如何保持窗体控件的状态有关。
UI中有三个主要控件 - 两个组合框和一个按钮。
SelectedItem = null
开头。AutoCompleteMode.SuggestAppend
,AutoCompleteSource
设置为AutoCompleteSource.ListItems
。这意味着用户可以输入组合框并弹出建议值以供选择。问题在于键盘导航和控制焦点,以及它们如何与维护各种控件的Enabled
状态相关的逻辑一起使用。
简而言之,在为组合框选择一个值时,按TAB键(选择组合框)会将焦点放在窗体上的下一个控件上(按TabIndex顺序),然后启用逻辑/禁用控件运行。
启用/禁用控件的逻辑发生在相关组合框的Validating / Validated事件中。
最终结果是控件可以在获得焦点后禁用。
例如:
- 仅启用ComboBox#1。 ComboBox#2和Button被禁用。所有ComboBox的SelectedItem都设置为null。
- 将焦点设置为ComboBox#1。
- 键入框的有效选项的前几个字母。
- 按Tab键。
醇>
当我按下TAB时,似乎在SelectedItem更改之前将焦点放在下一个控件上。在SelectedItem发生更改之前,无法运行启用或禁用其他UI控件的业务逻辑。
理想情况下,我想要的是反过来:焦点应该在UI控件的SelectedItem更新后移动,因此更新控件状态的逻辑已经运行。
有没有人对我如何做到这一点有任何建议?
答案 0 :(得分:0)
您是否可以在SelectedIndexChanged
/ SelectedValueChanged
中明确更改焦点以获取相应的组合框?您可能想要检查焦点当前的位置,并且只有在禁用的控件上才会移动。