我正在将VB6应用程序转换为Winforms,而在VB6中,我们经常使用一种技术,即只有在文本框之前输入特定值时,某些文本框才会显示。
问题在于,使文本框可见的决定仅在Validating事件中进行,此时已经确定了获得焦点的下一个控件。当我们使相关文本框可见时,焦点已经跳过控件。
我们能够通过在两个文本框之间放置一个空的透明用户控件来解决VB6中的问题,并且在usercontrol的gotfocus事件中,在键盘缓冲区中添加了一个额外的TAB。令人惊讶的是它的效果非常好。它甚至可以在您换班时使用。出于某种原因,忽略usercontrol并将焦点返回到第一个文本框。不出所料,我希望在Winforms中有更好的解决方案。
有没有人成功处理过这种情况?
答案 0 :(得分:1)
我在winform应用程序上遇到了类似的问题,我需要一个隐藏的文本框,根据前一个控件的值显示,同时将控件放入Tab键顺序,以便获得焦点。我最初的解决方案是设置一个类级别变量,该变量将与2个控件上的GotFocus和LostFocus(或Enter / Exit)一起使用,以确定焦点是否从前一个控件丢失,并强制将焦点设置为下一个控件。这不是一个可靠的解决方案,但仍然是一种选择。
我目前的解决方案效果更好。我需要为初始控件添加一个搜索按钮。此按钮位于2个控件之间的Tab键顺序中。因为按钮会从第一个控件获得焦点,所以第二个控制时间会在第一个控件验证时显示出来。
希望这有帮助。
答案 1 :(得分:0)
我相信你会发现WinForms中的东西“正常”。
在确定哪个字段应该获得焦点之前,会触发Validat ing 事件 - 如果验证失败,这会允许事件将焦点强制回原始控件。
查看来自MSDN的Control.Validating事件的详细信息,以查看按哪种顺序触发哪些事件。
或者,也许验证事件在工作流程中为时已晚 - 您是否在相关字段中的值合适时考虑披露控件,而无需等待焦点更改?我已经完成了这个 - 虽然只有复选框 - 用户体验是理想的。