vba - 当 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 上的按钮点击被注册。
更多细节:
- 在Form_Load事件中,Form_A 调用驻留在模块中的“内务处理”代码。该模块有一个名为“RemakeTables”的 Public Sub。RemakeTables 代码用于
DoCmd.OpenForm "Form_B"
显示“工作”对话框。 - RemakeTables 代码调用了其他几个 Public 子程序。在每次调用其他公共子程序之间,
DoEvents
调用一个允许“工作”对话框为“...”设置动画(即,在“工作”、“工作”、“工作......”和“工作”之间循环)在职的...”)。
我的预感是DoEvents
允许点击在 Form_A 中注册。
我应该如何做到这一点,以便在显示 Form_B“工作”对话框但仍然可以动画时无法注册点击?
解决方案
当我输入问题时,我突然想到主要问题是我在“管家”期间调用的子程序和函数使用该DoEvents
操作来允许 Form_B“工作”对话框更新/动画。但是,DoEvents
也允许鼠标点击注册。
那么,如何预防这个问题呢?
在Form_Open事件而不是Form_Load事件中包含“家务”调用,因为Form_Open事件首先发生,在Form_Load之前和显示表单之前,因此,如果“家务”代码是,则不会有任何可见的按钮可供单击在Form_Open中调用。
希望这可以帮助其他可能遇到类似问题的人。
推荐阅读
- python-3.x - 树莓派中的 CV2.dnn_Detection
- c - 在 C 中展开 For 循环
- excel - 如何检查 Filedialog 中的 Selecteditems 是否已被用户打开?
- c - 使用 C 宏创建带有 # 的字符串
- azure-devops - Azure DevOps AWS CloudFormation 创建/更新堆栈任务 - 失败“堆栈不存在”
- oracle - 在 Oracle 的过程中使用配置表中的值
- python - Python:如何在数据框中合并具有相同名称的“Ocode”或“Ccode”的行
- php - 初学者:将 html 元素中的 php 变量作为值输出
- python - 使用 CuPy 在 GPU 集群上进行百分比计算
- javascript - 如何在内部使用 javascript 作为语言链接 .js 文件中的 .txt 文件?