TabIndex不能正常工作的可能原因是什么?

13

我从0开始定义表单上控件的tabindex,但运行时一切都乱了。表单有点复杂,它有水平和垂直分割器、面板,组框和一些老的VB 6.0 ActiveX控件,其中包括树控件。即使我以编程方式完成并读取previewkeydown事件,并说如果是TAB,则控制2.Focus(),还是错了。真让人沮丧。有什么想法吗?...表单上还有不需要tab的标签,所以我将它们的索引定义为0。


发现了这个来自微软的文档,Stackoverflow上还有一个很有用的问题 - RajeshKdev
4个回答

26

你是如何设置它的? 如果你在visual studio中,在设计视图下选择视图 -> 选项卡顺序,然后按照你想要的顺序点击每个项目。

通常这对我很有效。


1
天呐!这太复杂了。他们展示的是像0.1.0.0.10和0.1.0.1.11这样的东西。 - Bohn
3
不同的数字代表不同的控制层。您需要选择最高层,然后往里面操作。每个层次都会在左上角有一个数字,请选择该数字,然后按所需顺序选择该层中的控制项。 - kerry
这个!视图 -> TabOrder 保存了很多时间和更少的挫败感。我还需要改变的是我所拥有的不同级别面板的 TabIndex。 - snakepitbean
总的来说,这是一个不错的函数。但是,我的表单非常小,有很多控件。由于标签太长,例如“0,0,0,0,0,0,0,0,0,0,0,5”,我无法看到它们。 - C4d
2
请注意,即使使用表单设计器,当您有嵌套控件时,它也会变得有些混乱。仅仅使用设计器选项卡顺序来选择控件的顺序是不够的... 您还需要选择包含的控件(例如面板等)- 否则它通常不会按预期工作。 - Chris Rogers
显示剩余2条评论

15

问题的原因是控件位于不同的容器中。 假设您有panel1.TabIndex = 0和panel2.TabIndex = 1,则在panel2中,textBox1.TabIndex = 0,在panel1中,textBox2.TabIndex = 1。 在运行时,textBox1会先于textBox2出现,因为它所在的面板先出现!

正如Kerry所说,使用“视图”->“制表符顺序”可以查看制表符顺序的完整层次结构。


准确地说,第四个数字(从1开始计数?;)在一个控件中是0,在另一个控件中是1。因此,这两个控件位于不同的容器中。这就导致了问题。 - Alireza

2
最初的回答:
我提到这个是因为我在stackoverflow上找到的任何winforms选项卡顺序线程中都没有看到它。
如果您有多个面板,则可以通过单击面板,转到属性,然后更改TabIndex为您想要的任何值来更改面板选项卡顺序。 这将允许您按照所需的顺序从面板导航到面板。 然后,在每个面板内,遵循上面列出的推荐步骤,使用视图>选项卡顺序并按照您设置的顺序单击每个单元格。

0

按照以下步骤进行:

  1. TabIndex 属性设置为直接子容器和控件,可以使用“视图”>“Tab 顺序”实用程序或直接从属性窗口中进行设置。完全忽略容器的 TabStop 属性,即使它非常重要,也默认为 false。
  2. 对每个容器重复第 1 步。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接