Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UI问题-控制控件状态和焦点_C#_.net 2.0_Controls_Focus_State - Fatal编程技术网

C# UI问题-控制控件状态和焦点

C# UI问题-控制控件状态和焦点,c#,.net-2.0,controls,focus,state,C#,.net 2.0,Controls,Focus,State,在开发.NET windows窗体应用程序时,我遇到了一些僵局。问题在于在控件之间切换焦点,以及如何维护窗体控件的状态 UI中有三个主要控件–两个组合框和一个按钮 两个组合框都以SelectedItem=null开头。 两个组合框都有一组可选择的显式有效选项。 两个组合框都使用AutoCompleteMode.SuggestAppend,并将AutoCompleteSource设置为AutoCompleteSource.ListItems。这意味着用户可以在组合框中键入,并弹出建议以选择值。 组

在开发.NET windows窗体应用程序时,我遇到了一些僵局。问题在于在控件之间切换焦点,以及如何维护窗体控件的状态

UI中有三个主要控件–两个组合框和一个按钮

两个组合框都以SelectedItem=null开头。 两个组合框都有一组可选择的显式有效选项。 两个组合框都使用AutoCompleteMode.SuggestAppend,并将AutoCompleteSource设置为AutoCompleteSource.ListItems。这意味着用户可以在组合框中键入,并弹出建议以选择值。 组合框1始终处于启用状态。 除非在组合框1中选择了特定值,否则组合框2将被禁用。 该按钮仅在以下情况下启用: 已从“始终启用”组合框中选择有效值。 如果在第一个组合框中选择了特定值,则已从第二个组合框中选择了有效值。否则,将忽略其值。 在所有其他情况下,它是禁用的。 问题在于键盘导航和控件焦点,以及它们如何与维护各种控件的启用状态相关的逻辑一起发挥作用

简言之,在为组合框选择值时,在运行启用/禁用控件的逻辑之前,按TAB键选择组合框会根据TabIndex顺序将焦点集中到窗体上的下一个控件

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

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

例如:

仅启用组合框1。组合框2和按钮被禁用。所有组合框的SelectedItem都设置为空。 将焦点设置为组合框1。 键入框中有效选项的前几个字母。 按TAB键。 当我按TAB键时,在SelectedItem被更改之前,焦点似乎被赋予了下一个控件。在更改SelectedItem之前,无法运行用于启用或禁用其他UI控件的业务逻辑

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


有人对我如何进行这项工作有什么建议吗?

您能否明确地在SelectedIndexChanged/SelectedValueChanged中更改相应组合框的焦点?您可能需要检查焦点当前所在的位置,并且仅当焦点位于禁用的控件上时才进行切换。

听起来这几乎就是我需要的解决方案。只有一件事困扰着我,那就是当我用力聚焦一个控件时,要尊重控件索引。我在这里要做的似乎是告诉.NET我知道的更多,这个控制需要重点关注。现在的问题是,如果使用键盘导航,如何区分按TAB键和SHIFT+TAB键的用户?我只想在用户界面导航到禁用控件的方向时移动焦点。