如何正确使用Access的模式窗体
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
要想使用Access的模式窗体,就必须对它的特性有充分的理解。 一、什么是模式窗体 例如当打开Access的选项窗口后,就只能在该窗口中进行操作,在本窗口未被关闭之前,无法与Access其他窗口进行交互。 这种窗体就称为模式窗体,也可称为模态窗口。模式窗体一旦打开,操作焦点就固定到该窗体上,必须首先关闭模式窗体,才能将焦点移至其他窗口。这是一种强制方式,“强制”用户先处理当前窗口。 在Access中,使用MessageBox宏操作、MsgBox函数弹出的确认对话框,文件(夹)选择对话框、保存文件对话框,就是模式窗体。我们自定义的登录窗口通常也需要设置为模式窗体。 二、怎样设置模式窗体 设置模式窗体有两种方式,一是通过窗体“模式”属性,将窗体固定为模式窗体,但是模式属性要与“弹出方式”(是否显示为一个独立的窗口)配合使用。如果“模式”选择了“是”,“弹出方式”选择了“否”,则该窗体虽然是模式窗体,但并不能完全阻止Access焦点的转移,例如功能区还是可以获取到焦点。 所以要让窗体完全变成一个模式窗体,要使用弹出窗体。 另一种方式是动态设置,在使用OpenForm宏操作(或VBA命令DoCmd.OpenForm),“窗体模式”设置为“对话框”,就能将窗体在打开时动态改变窗体模式。这种方法最常使用,它会忽视原窗体“模式”、“弹出方式”属性的设置。 使用VBA时的代码: DoCmd.OpenForm "联系人详细信息", acNormal, "", "1=0", , acDialog 三、怎样使用模式窗体 既然有两种方法将窗体变成模式窗体,我们使用哪种呢? 以上这两种情形下,结果会有非常大的区别,只有理解了才能运用好。 通过属性将窗体固定为模式窗体方式下,通过导航窗格打开窗体时,该窗体立即以模式状态显示,使用OpenForm命令打开窗体,窗口模式选择为“普通”,该窗体也会以模式状态打开。 但是我们在Access应用,极少会使用这种方式,其一是因为在一个应用中,我们通常不会直接在导航窗格中打开窗体,其二是固定的方式可能带来其他问题。 以下是一个按钮事件中的代码(使用宏操作),来自于官方模板,任意模板中都有这种代码: 该事件要完成两件事:从A窗体打开B窗体、对A窗体刷新并重新定位记录。那么这里的重点就是打开B窗体时,使用了“对话框”模式(以模式窗体打开)。使用OpenForm+对话框,就会将代码停止在OpenForm操作,换句话说,在窗体B关闭之前,后面的代码不会被执行,直至窗体B关闭,才顺序执行后续的代码。 这里OpenForm如果使用的是“普通”窗口模式(窗体B在属性中设置为模式状态),那么窗体B也会以模式窗口的方式打开,但是,OpenForm后面的代码会一起被顺序执行。 到此你应该已经理解了,OpenForm+对话框的方式,可以将后续的动作指令放置在一个子过程中,利用它的特性让后续动作实现起来更容易、代码更简洁。 应用场景非常广泛,例如打开一个窗体编辑记录,通过打开的窗体新增组合框的行来源内容,打开窗体输入筛选条件等等,都需要在模式窗体B关闭后,对原打开它的窗体A有一个信息反馈,使用OpenForm+对话框的动态方式让这一系列动作连贯起来,非常方便。 当然,如果在模式窗体打开后,不需要反馈信息,也没有后续的操作代码,使用以上两种方式都可以。 四、模式窗体的局限 使用OpenForm+对话框的方式,虽然优势很明显,但它会忽视窗体边框样式的设置: 为了得到更好的视觉效果,常常要使用无边框的窗体样式,以便设置成自己的窗体外观,例如自定义拾色器、日期选择器等。我们会设置成操作更快捷、界面更简单的无边框窗体,如果该窗体使用OpenForm+对话框的方式打开,那么边框的设置就会失效。 为了迁就无边框窗体,完成同样一项任务,就需要改变设计思路、编写更多的代码。 END 阅读原文:原文链接 该文章在 2025/1/24 9:20:12 编辑过 |
关键字查询
相关文章
正在查询... |