我继承了一个frankenstein VB6“Converted”到VB.NET winform应用程序。这个应用程序中有一个公吨的字段,用户理所当然地抱怨标签顺序是关闭的(在某个点之后它开始跳过整个表单)。
按Tab键顺序查看某些内容已关闭,我进入并启用了View> Tab顺序,它看起来不错。
为了确保我再次刷新表格,当我在Tab键顺序中查看一切都很好,但是当应用程序运行时,它仍然开始像以前一样在同一区域跳跃?!有没有其他人遇到过这个问题,你是如何解决的?
[编辑]:这些输入表单都位于选项卡控件中的单独选项卡上,这可能会使情况更加混乱。
答案 0 :(得分:3)
代码中是否有任何奇怪的Focus调用覆盖了Tab键顺序并手动设置应用程序的焦点?
我过去遇到过问题,因为标签排序让自己感到困惑,我通常只是从头开始通过应用程序并手动设置订单。我意识到这可能不是你想要的,但我不知道其他什么
答案 1 :(得分:2)
如果表单上有很多控件,则可能会使用面板和组框等容器进行组织。设置Tab键顺序时,您还必须考虑容器的顺序。容器中的Tab键顺序之间的不一致可以解释奇怪的跳跃。如果两个或多个控件/容器具有相同的Tab键顺序值,使Tab键过程任意,则会发生这种情况。
解决方案想法:当然,更新和更正标签顺序是一项缓慢,容易出错的工作。您可能有必要编写一个例程,以递归方式遍历表单的容器和控件,并正确分配Tab键顺序值。您可以通过比较容器的每个控件的位置点来设置Tab键顺序,其中顶部和最左侧的点是“较低”等级,而最右侧的组件是“最高”。这当然需要一个自定义排序alg。如果你环顾四周,这样的事情可能就已经存在了。
解决方案理念2:重构!分而治之。这需要一些时间,但如果您将UI组件移动到单独的,逻辑上组织的用户控件中,您将会更加严格的代码库。你还会发现很多错误!
答案 2 :(得分:1)
有可能,您的某些控件嵌入在容器控件中,并且容器控件的Tab键顺序会导致焦点显示为随机跳转。确保当您处于Tab键视图时,您需要特别注意容器控件的Tab键顺序:确保它们中没有一个具有相同的Tab键顺序,并且它们按照Tab键顺序进行逻辑排序你的个人控制。
否则,您需要检查您的UI代码,以查看可能在运行时干扰默认Tab键顺序的Control.Focus
的某些调用。一些验证代码可能在成功完成后将焦点更改为“下一个”控件(如果验证失败,则“返回”到上一个控件)。