如何在winform表单中更改选项卡顺序或修改选项卡页面集合



这是我的场景。我有一个c# Winform应用程序,它的窗体有3个按钮。

Button A; //Default tabindex == 0
Button B; //Default tabindex == 1
Button C; //Default tabindex == 2

我以编程方式创建并添加3个按钮到表单:D, E和f,然后尝试以下

D.TabIndex = 1;
E.TabIndex = 2;
F.TabIndex = 3;
B.TabIndex = 4;
C.TabIndex = 5;

tab键时,应该是

A -> D -> E -> F -> B -> C

当我运行应用程序并在控件中使用制表符时,它的实际运行方式是

A -> B -> C -> (some combination of D -> E -> F in whatever order I make them in)

我在谷歌上搜索了这个问题,并不断提出答案,说的事情沿着"只要修改表单的标签页集合!Easy Easy !"但是我找不到具体的例子。我已经查看了表单的各种方法和属性,但我没有看到任何属性看起来与标签页集合非常接近。

所以我在这里。有人知道这样做的方法,以便按钮去a -> D -> E -> F -> B -> C当我在运行时以编程方式添加D, E和F ?

谢谢!

我认为你混淆了单词TabIndex与TabControls和TabPages等。TabIndex是当用户单击键盘上的Tab键时控件获得焦点的顺序。

要插入新按钮,需要重新索引父容器中的现有控件。

一个工作示例(假设您的表单上已经有按钮A, B, C):

int tabIndex = 1;
foreach (string s in new string[] { "D", "E", "F" }) {
  Button b = new Button();
  b.Text = s;
  foreach (Control c in this.Controls) {
    if (c.TabIndex >= tabIndex) {
      c.TabIndex++;
    }
  }
  b.Location = new Point(16, tabIndex * b.Height + 4);
  b.TabIndex = tabIndex++;
  this.Controls.Add(b);
}

我认为问题可能是当您以编程方式创建按钮时。

当你以编程方式创建按钮时,你已经在表单中拥有的所有其他控件都有自己的TabIndex,然后如果你将按钮TabIndex更改为2,可能另一个控件已经共享索引2,这就是为什么它不能正常工作。

一个可能的解决方案,当你建立你的表单,尽量不要使用数字,你将使用当你创建你的按钮编程;)

希望对大家有所帮助

Tab顺序遍历控件树,可以通过TabIndex值控制同一父节点下的对等体之间的顺序。我怀疑问题可能是新控件添加在封闭父组中,而不是作为原始按钮控件的对等项。封闭组有自己的TabIndex,该TabIndex定义了它相对于自己的对等组(原始按钮)的顺序,默认情况下放在最后。如果是这种情况,那么无论您将它们的单个TabIndex值设置为什么,新按钮都将始终作为一个组排在最后。

确保封闭组有TabIndex = 1(与B移动到2,等等),其中的控件应该按整体制表符顺序在A和B之间。您应该能够在设计器中做到这一点(此外,可以使用Document Outline窗口帮助查看表单上控件的树状结构)。请注意,TabIndex仅适用于同一父控件的对等体,因此D、E和F可能会获得自己的TabIndex值0,1和2。

或者,如果没有封闭组(如果问题是它不允许您动态更改原始按钮的选项卡顺序),您可以在原始布局的选项卡顺序中添加一个组,然后在其中添加动态按钮。当然,这取决于您的布局是否允许对动态按钮进行这样的分组。

最新更新