C# (在tabcontrol上)通过tabcontrol.tabs自动分页控件的有效方法

C# (在tabcontrol上)通过tabcontrol.tabs自动分页控件的有效方法,c#,winforms,tabcontrol,tabbing,tab-ordering,C#,Winforms,Tabcontrol,Tabbing,Tab Ordering,我试着编辑它来区分tabControl上的“tab”和使用tab键通过控件进行的“tab”,但我只是想通过它来增强功能,希望它的意思是清楚的 我有一个带有tabcontrol接口的c项目。3个选项卡页面每个选项卡中都包含个人信息、联系人详细信息、附加说明和相关控件 我们的大多数用户发现,仅使用键盘(如键盘快捷键和导航控件的选项卡)导航界面更容易。我已经包括了各种快捷组合的键盘侦听器。例如,PageUp和PageDown将允许用户通过各种选项卡进行分页 但是,这些用户在输入信息时遵循相同的模式:一

我试着编辑它来区分tabControl上的“tab”和使用tab键通过控件进行的“tab”,但我只是想通过它来增强功能,希望它的意思是清楚的

我有一个带有tabcontrol接口的c项目。3个选项卡页面每个选项卡中都包含个人信息、联系人详细信息、附加说明和相关控件

我们的大多数用户发现,仅使用键盘(如键盘快捷键和导航控件的选项卡)导航界面更容易。我已经包括了各种快捷组合的键盘侦听器。例如,PageUp和PageDown将允许用户通过各种选项卡进行分页

但是,这些用户在输入信息时遵循相同的模式:一旦他们按需要通过“个人信息”选项卡的控件填充并到达选项卡上的最后一个控件,他们希望“保持选项卡”。如中所示:当上一个控件聚焦在TabControl.Page1上时,用户按tab键将焦点移动到TabControl.Page2上的第一个控件。当上一个控件聚焦于TabControl.Page2时,用户按tab键将焦点移动到TabControl.Page3

通过这种方式,信息被分组并包含在一起,用户只需继续键入和标记即可在表单上输入所有信息,而无需键盘

因此,真正的问题是如何有效地做到这一点: 我不能简单地处理最后一个控件的OnLeave:最后一个控件上的用户选择一个较早的控件,甚至shift选项卡也会触发事件


另一个问题是维护:如果维护人员忘记/不知道这个“将焦点移动到下一个选项卡”功能,那么在选项卡底部添加另一个控件可能会导致整个问题。可能是要将最后一个控件添加到表单中?

我已重写ProcessDialogKey方法来处理Tab和Shift+Tab按键,将tabPages和焦点转移到相关控件。从功能上讲,这将起作用

维修问题

这个特定的界面不会经常更改,在发布之前,仍然有大量的可用性测试正在进行,以确定哪些界面工作得最好,所以我们可能最终会恢复

糟糕的是,转移焦点是相当硬的编码。我看不出任何特别简单的方法来处理这个问题

幸运的是,维护应该很低,因为只有3个标签页。业务逻辑完全封装在其他地方,因此对业务功能没有风险。代码包含在相关区域内,因此易于识别。由于用户都是“键盘爱好者”,在数据输入过程中,他们可以很快发现出错的地方


欢迎提出任何意见/建议。

是的,你说得对。这将是一场巨大的维护噩梦。即使您使用正确的方法并重写ProcessDialogKey方法,您仍然会创建非常脆弱的代码,在更改控件顺序或添加其他控件时,这些代码都会中断。