3

我继承了一个 frankenstein VB6 "Converted" to VB.NET winform 应用程序。该应用程序中有大量字段,用户理所当然地抱怨标签顺序已关闭(在某个点之后它开始在整个表单中跳跃)。

确定标签顺序中的某些内容已关闭,我进入并打开“视图”>“标签顺序”,它看起来不错。

为了确保我再次新鲜地浏览了表单,当我处于标签顺序视图时一切都很好,但是当应用程序运行时它仍然开始像以前一样在同一区域跳跃?!有没有其他人遇到过这种情况,如果遇到了,您是如何解决的?

[编辑]:这些输入表单都位于选项卡控件中的单独选项卡上,这可能会使情况更加混乱。

4

3 回答 3

3

代码中是否有任何奇怪的 Focus 调用覆盖 Tab 键顺序并手动设置应用程序的焦点?

过去,我遇到过标签排序问题,让自己感到困惑,我通常只是从头开始浏览应用程序并自己手动设置顺序。我意识到这可能不是您想要的,但我不知道其他任何事情

于 2010-11-30T15:00:59.603 回答
2

如果您在表单上有许多控件,则它们可能是使用面板和组框等容器组织的。在设置标签顺序时,您还必须考虑容器的顺序。容器中标签顺序之间的不一致可以解释奇怪的跳跃。尤其是当两个或多个控件/容器具有相同的选项卡顺序值时,这可能会发生,这使得选项卡过程是任意的。

解决方案理念:当然更新和更正标签顺序是缓慢且容易出错的工作。您可能应该编写一个例程来迭代表单的容器和递归控制并正确分配 Tab 顺序值。您可以通过比较容器的每个控件的位置点来设置选项卡顺序,其中最顶部和最左侧的点是“较低”等级,而底部最右侧的组件是“最高”。这当然需要自定义排序算法。如果你环顾四周,这样的东西可能已经存在了。

解决方案2:重构!分而治之。这将需要一些时间,但如果您将 UI 组件移动到单独的、逻辑组织的用户控件中,您将获得更紧密的代码库。您还将发现很多错误!

于 2010-11-30T15:00:07.907 回答
1

很有可能,您的某些控件嵌入在容器控件中,并且容器控件的 Tab 键顺序导致焦点看起来好像在随机跳跃。确保当您在 Tab 键顺序视图中时,您要特别注意容器控件的 Tab 键顺序:确保它们都没有相同的 Tab 键顺序,并且它们的 Tab 键顺序在逻辑上是您的个人控制。

否则,您需要检查您的 UI 代码是否有一些调用Control.Focus可能会干扰运行时的默认选项卡顺序。某些验证代码可能会在成功完成后将焦点更改为“下一个”控件(如果验证失败,则“返回”到上一个控件)。

于 2010-11-30T15:00:36.067 回答