如何在winform表单中更改Tab键顺序或修改标签页集合?

时间:2014-03-17 18:41:18

标签: c# winforms tabindex

所以这是我的情景。我有一个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;

当我选择时,它应该去

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

当我运行应用程序并通过控件选项卡时实际的方式是

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

我已经搜索了这个问题,并不断提出答案,说明“只需修改表单的标签页集合!简单易用!”但我实际上找不到如何做到这一点的例子。我已经查看了表单的各种方法和属性,但是我没有看到任何看起来非常接近于标签页集合的属性。

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

谢谢!

3 个答案:

答案 0 :(得分:4)

我认为你将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);
}

答案 1 :(得分:3)

我认为问题可能出在以编程方式创建按钮时。

当您以编程方式创建按钮时,表单中已有的所有其他控件都有自己的TabIndex,如果您将按钮TabIndex更改为2,则可能另一个控件已共享索引2,这就是它无法正常工作的原因。

一种可能的解决方案,在构建表单时,尽量不要使用以编程方式创建按钮时使用的数字;)

我希望这会有所帮助

答案 2 :(得分:0)

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

确保封闭组具有TabIndex = 1(B移动到2等),然后其中的控件应在整个Tab键顺序中在A和B之间全部命中。您应该能够在设计器中执行此操作(同样,使用“文档大纲”窗口来帮助查看表单上控件的树结构)。请注意,TabIndex仅适用于同一父Control的对等体,因此D,E和F可能会获得自己的TabIndex值0,1和2.

或者,如果没有封闭组(如果问题是它不能让您动态更改原始按钮的Tab键顺序),您可以在Tab键顺序中的那个位置添加一个组在原始布局中,然后在其中添加动态按钮。当然,这取决于您的布局是否适合动态按钮的分组。

相关问题