代码之家  ›  专栏  ›  技术社区  ›  Darrel Miller

进行渐进式披露时如何处理选项卡顺序?

  •  1
  • Darrel Miller  · 技术社区  · 16 年前

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

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

    在VB6中,我们可以通过在两个文本框之间放置一个空的、透明的usercontrol,并在usercontrol的gotfocus事件中在键盘缓冲区中添加一个额外的选项卡来解决这个问题。令人惊讶的是,它工作得相当好。它甚至可以在您将tab键向后移动时工作。由于某些原因,usercontrol被忽略,焦点返回到第一个文本框。毫不奇怪,我希望Winforms中有更好的解决方案。

    有人成功地处理了这种情况吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Chris Porter    16 年前

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

    不过,我目前的解决方案效果要好得多。我需要为初始控件设置一个搜索按钮。此按钮在两个控件之间按制表符顺序排列。因为按钮将从第一个控件获取焦点,所以当第一个控件验证时,它将给第二个控件显示自己的时间。

    希望这有帮助。

        2
  •  0
  •   Bevan    16 年前

    我相信你会发现WinForms中的东西“只是工作”。

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

    请看一看该计划的细节 Control.Validating 事件,以查看哪些事件以何种顺序触发。

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

    推荐文章