表单更改时触发的事件

Posted

技术标签:

【中文标题】表单更改时触发的事件【英文标题】:Event that fires when a form changes 【发布时间】:2010-01-14 17:15:29 【问题描述】:

我有一个显示项目信息的表单。表单上的大多数字段都绑定到 Project 表,并像绑定字段一样显示和更新。但是,我还有 10 个来自 ProjectAudience 表的复选框。只有选中表格上的框,表中才会有匹配的记录。因此,我需要插入和删除记录,因为这些框被选中和取消选中。

我可以使用 AfterUpdate 事件在复选框级别执行此操作,但这需要 10 个不同的事件。我希望通过删除该项目的 ProjectAudience 表中的所有记录并添加选中的记录来在表单级别执行此操作。

基本上,我正在寻找与 Form_Current 事件相反的事件,该事件在触发记录导航按钮或关闭表单时会触发。我试图避免编写自己的导航按钮或向用户必须按下的表单添加“保存”按钮。我想要一些自动的东西,当用户离开记录时会更新这个表。

基于以下评论:从无到全部的任何组合框都可以被选中,而不仅仅是单个框。因此,我可能会清除所有记录而不插入任何回......或者如果每个框都被选中,则添加 10 条记录。 (另外,我使用的是 Microsoft Access 2003)

【问题讨论】:

【参考方案1】:

您是否考虑将这些复选框添加到选项组并使用该组中的事件?

编辑重新评论,替代方法,不要使用选项组,而是将代码添加到所有相关选项的事件行。

您不需要为 10 个不同的事件编写代码,您可以将事件行设置为,例如 On Click 到函数的名称,让我们说:

On Click  : =TestMe()

Event Line http://ltd.remou.com/access/EventLine.png

然后你需要一个函数:

Function TestMe()
    MsgBox "You clicked " & Screen.ActiveControl.Name
End Function

【讨论】:

我可能对组进行了错误的编码,但是当我尝试时,一次只能选中一个框。在上述情况下(我将编辑我的原始帖子),检查从无到全部的框的每个组合是可能的。所以可能有从 0 到 10 的任何记录。 但是如果我将我的 10 个复选框放在一个选项组中,那么我只能选择 10 个框中的 1 个。我需要能够选中多个框,最多 10 个。此时这不是一个事件问题,选项组不会让我多选。 我应该明确表示这是一种替代方法。选择所有十个选项框并选择一个事件以设置为函数的名称,例如 On Click : =TestMe()。 这就是我最终要做的。每个复选框的更新后事件调用一个函数并传递它们是哪个复选框(1、2 等,最多 10 个)以及它们是被选中还是未选中(0 或 -1)。然后该函数将插入或删除适当的记录。我不喜欢这种方法,因为它需要 10 个 AfterUpdate 事件。是的,所有 10 都调用相同的函数,但它是 UGLY 代码。我想要一个 AfterUpdate 事件来调用一个函数。 您不希望将属性表中的 afterupdate 行设置为函数的名称,如我所示吗?不需要10个事件,参考一个函数就行了。【参考方案2】:

您可以使用 BeforeUpdate 方法。但是,如果仅更改了复选框,则不会触发此事件,因为表单绑定到的记录没有更改。

我建议将事件链接到复选框。创建一个函数 UpdateCheckbox(CheckboxID as integer) 执行您想要的操作,并将其放入来自 ckeckboxes 的“OnClick”事件中:=UpdateCheckbox(1)。更改不同复选框的 1。

【讨论】:

以上是关于表单更改时触发的事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mobile Safari“表单助手”在选择元素上未触发更改事件

当用户控件具有焦点时,如何触发表单级事件?

当用户从浏览器存储表单下拉列表中进行选择时会触发哪些事件?

通过 ngModel Binding 设置值时如何在 textarea 上触发更改事件

Access VBA - 触发组合框更改事件

无论控件如何,在表单上的任何控件更新后有啥方法可以触发事件?