【问题标题】: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)

【问题讨论】:

    标签: ms-access events forms navigation


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多