Cli*_*rce 6 c# user-interface tabs winforms
我有一个带有嵌套选项卡控件的表单.我们正在努力使申请键盘友好的,因此,当您访问的是内突片控制,我们想控制-Tab键可循环内的标签.在大多数情况下,这是有效的.从这里开始关注TextBox A ....

控制选项卡将按预期将我们带到下一个选项卡,焦点在TextBox B中:

太棒了,正是我们想要的.如果"Gamma"和"Delta"相似,我会再次使用Control-Tab返回Alpha.
但是,我们有几个选项卡,其中所有控件都在组框内.这会导致各种问题.如果我采用相同的示例,但将文本框放在一个组框内.从这里开始重点关注TextBox A:

Control-tab将我们带到了我们期望的下一个标签.(奇怪的是,重点不是任何可见的......)

但是然后Control-tab再次带我们去......

猜测:这是因为从Alpha(带有分组框)到Beta(带有分组框)的选项卡让Beta无法控制焦点.焦点返回到选项卡控件本身(AlphaBetaGammaDelta),Control-Tab传递给外部选项卡控件(OneTwoThreeFour).
现在,我可以通过捕获内部选项卡控件的SelectedIndexChanged事件来解决这个问题,并在每次更改时手动将第一个可聚焦控件集中在该选项卡内,但这似乎是错误的,如果控件移动则会导致维护问题.
// Works, but I'm not crazy about it.
private void tabControlABGD_SelectedIndexChanged(object sender, EventArgs e)
{
switch(tabControlABGD.SelectedTab.Name)
{
case "tp_A":
tb_a.Focus();
break;
case "tp_B":
tb_b.Focus();
break;
case "tp_G":
tb_g.Focus();
break;
case "tp_D":
tb_d.Focus();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
弄乱表格的"标签顺序" - 没有任何影响.
解决这个问题的正确方法是什么?
尝试简单地调用 SelectNextControl 方法,而不是切换:
void tabControlABGD_SelectedIndexChanged(object sender, EventArgs e) {
this.SelectNextControl(tabControlABGD, true, true, true, true);
}
Run Code Online (Sandbox Code Playgroud)