【问题标题】:VB.NET Limit to Tab Ordering?VB.NET 限制制表符排序?
【发布时间】:2011-05-17 22:24:26
【问题描述】:

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

发现按 Tab 键顺序关闭了某些东西,我进去并打开了“视图”>“Tab 键顺序”,它看起来不错。

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

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

【问题讨论】:

  • 你有我的同情。我也处理了我在 vb6->vb.net 上的疯狂,这并不好玩:(
  • @Joel & curtisk:我也有这种感觉。我们需要建立一个支持小组吗?我有很多痛苦要分享。
  • @Paul 给我注册,这玩意儿很烦人:p
  • @Paul 我将问题签到vb6-migration 标签。这是我所知道的最接近支持小组的东西......
  • @MarkJ 谢谢...很高兴知道还有其他人受苦:p

标签: vb.net winforms user-interface vb6-migration tab-ordering


【解决方案1】:

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

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

【讨论】:

  • 说这是一个“奇怪的”焦点调用未免太棒了,它试图验证的内容和代码所在的位置都非常糟糕,但最终就是这样,谢谢!
【解决方案2】:

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

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

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

【讨论】:

  • 好主意,不过已经讲过了,其实它们是在group box里面的逻辑分组,group box的顺序是正确的,group下面的item是正确的10.0.1、10.0。 2 型号名称
  • 嗯。不过,你的例子中的中间零让我担心......它是如何分配和处理的?
  • 我会更新主要问题,但是这些输入表单都在单独的选项卡(选项卡控件)上,这可能会加剧痛苦:/
  • 我认为只有一部分。选项卡实际上应该像任何其他类型的容器一样工作。我刚刚在我的回答中添加了另一个建议:重构!
【解决方案3】:

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

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

【讨论】:

  • 检查我对 Paul 的回复,已经在小组路径中,但知道我必须寻找焦点跳跃,看看是否是这种情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多