表单更改时触发的事件
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“表单助手”在选择元素上未触发更改事件