【问题标题】:MS Access form_current() firing multiple timesMS Access form_current() 多次触发
【发布时间】:2011-02-16 04:27:39
【问题描述】:

我有一个包含两个子表单的表单(在单独的标签页上)。这是 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 表单控件 - 这可能是导致它的原因吗?

或者还有什么想到的?

谢谢。

埃里克

【问题讨论】:

  • 这是一个无法解决的已知问题——子表单的 OnCurrent 事件总是先出现两次。除了使用计数器来防止代码再次触发之外,您无能为力。

标签: ms-access forms ms-access-2003


【解决方案1】:

正如 TheAceMan1 曾经指出的那样,“对于 On Current 事件,您唯一需要注意的是递归!也就是说……事件中的代码会导致事件重新触发。就像在代码中移动到另一条记录一样.除此之外......事件可以根据需要进行。我发现 Current 非常紧张。也就是说,有时它是放置代码的唯一地方。

您可能知道子表单的事件在父表单的事件之前触发。这对于 Load 来说当然是正确的,也许对于 Current 也是如此。

我只能建议逐步解决问题;注释掉零件,检查功能并解决问题。当然,您可以随时发布更多代码供我们查看。

【讨论】:

  • 谢谢 - 它可能与父表单之前的子表单当前触发有关,然后再次将焦点设置到子表单或其他内容。希望我有时间追踪它。目前我认为用户可以一次编辑一条记录。
猜你喜欢
  • 2011-08-03
  • 2015-10-30
  • 1970-01-01
  • 2013-11-03
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
相关资源
最近更新 更多