首页 > 解决方案 > 当 Form_B 在 Form_A 上正确显示模态时,如何防止在 MS Access Form_A 中单击按钮

问题描述

当我输入这个问题时,我意识到问题可能是什么,然后能够解决它。因此,我发布了问题,然后发布了答案,以防它对其他人有所帮助。

我正在使用 MS Access 2016。我有一个显示按钮菜单的 Form_A——每个按钮将用户带到不同的表单以执行用户需要执行的任何功能。例如,一个 Form_A 菜单按钮可以是 [Add Clients],而另一个按钮可以是 [Add Staff],等等。

当用户第一次登录系统时,我使用 VBA 代码来执行一些“大扫除”功能。Form_A 和按钮是可见的,但我制作了一个 Form_B,它是一个小对话框,显示“工作”一词和动画“...”,而 Form_A 中的 VBA 进行大扫除。

我无法解决的问题是,即使我将 Form_B 的“弹出”属性设置为“是”并将其“模态”属性设置为“是”,用户仍然可以单击 Form_A 菜单上的按钮,然后在 Form_B 执行时执行还在做大扫除。

我认为将 Form_B 设置为模态应该可以防止 Form_A 上的按钮点击被注册。

更多细节:

  1. Form_Load事件中,Form_A 调用驻留在模块中的“内务处理”代码。该模块有一个名为“RemakeTables”的 Public Sub。RemakeTables 代码用于DoCmd.OpenForm "Form_B"显示“工作”对话框。
  2. RemakeTables 代码调用了其他几个 Public 子程序。在每次调用其他公共子程序之间,DoEvents调用一个允许“工作”对话框为“...”设置动画(即,在“工作”、“工作”、“工作......”和“工作”之间循环)在职的...”)。

我的预感是DoEvents允许点击在 Form_A 中注册。

我应该如何做到这一点,以便在显示 Form_B“工作”对话框但仍然可以动画时无法注册点击?

标签: vbaformsms-accessmodal-dialog

解决方案


当我输入问题时,我突然想到主要问题是我在“管家”期间调用的子程序和函数使用该DoEvents操作来允许 Form_B“工作”对话框更新/动画。但是,DoEvents也允许鼠标点击注册。

那么,如何预防这个问题呢?

在Form_Open事件而不是Form_Load事件中包含“家务”调用,因为Form_Open事件首先发生,在Form_Load之前和显示表单之前,因此,如果“家务”代码是,则不会有任何可见的按钮可供单击在Form_Open中调用。

希望这可以帮助其他可能遇到类似问题的人。


推荐阅读