Windows窗体,嵌套TabControls与Groupbox选项卡顺序神秘(附图)

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)

弄乱表格的"标签顺序" - 没有任何影响.

解决这个问题的正确方法是什么?

Lar*_*ech 1

尝试简单地调用 SelectNextControl 方法,而不是切换:

void tabControlABGD_SelectedIndexChanged(object sender, EventArgs e) {
  this.SelectNextControl(tabControlABGD, true, true, true, true);
}
Run Code Online (Sandbox Code Playgroud)