我有一个包含两个子表单的表单(在单独的选项卡页面上)。它是Access中的MDB项目 2003。
当它最初打开时,活动子窗体上的Form_Current会触发一次,如 应该。
但是当你移动到另一个记录(即从主窗体)时,它会触发 Form_Current在活动子表单上4次。然后是后续的记录动作 导致Form_Current激发2次。这是一种痛苦,因为子形态 有很多字段可以移动和/或隐藏,所以它会跳转 每个Form_Current,更不用说慢了。
我通过DoCmd.OpenForm打开带有过滤器的表单(实际上它发送了 通过OpenArgs中的过滤器)。 FilterOn只在Form_Open上设置一次 主要形式,从不在子表单中。 Form_Current未显式调用 代码中的任何其他地方。
当Form_Current第一次触发时,当我查看调用堆栈时, 它看起来像:
my_subform.Form_Current
[<Debug Window>]
my_subform.Form_Current
所以看起来Form_Current中的东西正在触发另一个 Form_Current事件。但仅限于第一次记录。
Form_Current中的代码有点复杂,涉及自定义类和 事件回调,但一般不会触及表数据。我唯一的事 可以认为可能触发Form_Current是它检查OldValue 表单控件 - 这可能导致它吗?
或其他任何想法?
感谢。
Eric
答案 0 :(得分:1)
正如TheAceMan1曾经指出的那样,“On Current事件唯一需要注意的是递归!这是导致事件重新触发的事件中的代码。就像转移到代码中的另一条记录一样除此之外......事件可以根据需要变得很大。“我发现Current很可怕。也就是说,它有时是放置代码的唯一地方。
您可能知道子表单的事件在父表单的事件之前触发。这对于Load来说肯定是正确的,也可能对于Current来说也是如此。
我只能建议一步一步的故障排除;注释掉部件,检查功能,然后解决问题。当然,您可以随时发布更多代码供我们查看。