【问题标题】:How to handle tab order when doing progressive disclosure?进行渐进式披露时如何处理标签顺序?
【发布时间】:2010-02-22 22:00:03
【问题描述】:

我正在将 VB6 应用程序转换为 Winforms,在 VB6 中,我们经常使用一种技术,即某些文本框仅在之前的文本框中输入特定值时才可见。

问题在于使文本框可见的决定仅在 Validating 事件中做出,此时已确定下一个获得焦点的控件。当我们使依赖的文本框可见时,焦点已经跳过了控件。

我们能够通过在两个文本框之间放置一个空的、透明的用户控件并在用户控件的 gotfocus 事件中在键盘缓冲区中填充一个额外的 TAB 来解决 VB6 中的问题。令人惊讶的是,它运作良好。它甚至可以在您移回制表符时起作用。由于某种原因,用户控件被忽略并且焦点返回到第一个文本框。不出所料,我希望 Winforms 有更好的解决方案。

有没有人成功处理过这种情况?

【问题讨论】:

    标签: winforms


    【解决方案1】:

    我在一个 winform 应用程序中遇到了类似的问题,我需要一个隐藏的文本框,以便根据前一个控件的值显示,同时将控件置于 Tab 键顺序,以便获得焦点。我最初的解决方案是设置一个类级别变量,该变量将与 2 个控件上的 GotFocus 和 LostFocus(或 Enter/Exit)一起使用,以确定焦点是否从前一个控件中丢失,并强制将焦点设置到下一个控件。这不是一个可靠的解决方案,但仍然是一种选择。

    不过,我目前的解决方案效果要好得多。我需要为初始控件放置一个搜索按钮。此按钮位于 2 个控件之间的 Tab 键顺序中。因为按钮会从第一个控件获得焦点,所以当第一个控件验证时,它会给第二个控件时间来显示自己。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我相信您会发现在 WinForms 中“正常工作”。

      Validating 事件在决定哪个字段应该接收焦点之前触发 - 这允许事件在验证失败时将焦点强制返回到原始控件。

      查看来自 MSDN 的 Control.Validating 事件的详细信息,了解哪些事件以何种顺序触发。

      或者,验证事件在工作流中可能为时已晚 - 您是否考虑过在相关字段中的值合适时立即披露控件,而不是等待焦点改变?我已经做到了——尽管只使用了复选框——而且用户体验非常理想。

      【讨论】:

      • 复选框之所以有效,是因为它是一个二进制值,您可以在用户选中该框后立即采取行动。但是,对于文本框,您确实需要完整的输入,然后才能决定是否应使下一个字段可见。下一个获得焦点的控件肯定是在验证事件发生之前确定的。我有一个适用于所有情况的解决方案,除非您使用 shift-tab 并且某个字段变得可见。我会在今天晚些时候发布。
      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 2013-09-10
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多