设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2729|回复: 0
打印 上一主题 下一主题

[Access本身] 【小技巧】如何引用子窗体的控件

[复制链接]
跳转到指定楼层
1#
发表于 2020-3-26 00:52:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在实际工作中,需要引用子窗体甚至孙窗体的控件的情形并不罕见。但对于刚刚接触窗体的新手而言,可能一脸蒙圈,为啥这样引用就会出现“#名称?”错误,到底错在哪里?
作为Access的经典范例,《刘小军常用窗体查询》里其实提过的(如下图):


只不过很多新手在学习这个案例时,可能没留意到这一点,即便注意到了这个生成器的应用,但面对复杂的嵌套窗体时,新手或许也会像我当时那样地茫然:为什么原来的表达式没问题,嵌套后却出错?

我个人建议不要像上图那样,在“所有窗体”上生成表达式,而是在打开窗体时,通过“加载的窗体”来生成。接下来我将解释为什么这样做。

我们先把查询,窗体复制一份出来,分别重命名,并按前面那样。从“所有窗体”里修改好查询语句:

接下来,我们打开这个“存书查询窗体1”,随意查询一下,发现是正常的:

接着,我们创建一个测试窗体,把这个“存书查询窗体1”拖进去,保存后,再打开测试窗体看看出现什么情况:

开始要求我们输入参数值了。这时候,我们可以先依次点击取消,结果出现“#名称?”错误,存书查询子窗体1对应的区域出现空白:

显然,我们所引用的控件出现了问题。那么,我们只能重新来处理表达式了。
接下来,我们来看看,从“加载的窗体”里完成,看看是什么情况。
先用在设计模式下打开“测试窗体”,右击查询窗体,选择生成器,再依次点击:加载的窗体\测试窗体\存书查询窗体1\书名\<值>(见生成器下方树形菜单),结果如下所示:

留意到新旧表达式的不同了么?接下来,我们按新的表达式来修改查询,然后看看结果如何:

居然就这样解决了。是不是很神奇?

留意到这个表达式的结构了吗?先是Forms,然后到主窗体名称,再到子窗体名称,再到一个form,最后是控件名。除了form是用点号连接起来之外,其它都是用叹号来连接。这两者其实并没有本质上的不同。只是习惯上,用叹号来表示从属关系,用点号来表示属性。论坛里有这方面的帖子,这里就不展开叙述了。

有人可能会问了,那如果有很多层,岂不是要写很多个“form”?其实这个“form”是可以不写的,因为它只是子窗体的一个属性。我们把条件里对应的控件,改成类似于“Forms![测试窗体]![存书查询窗体1]![书名]”格式,会发现并没有报错。

现在我们回到主题,把“存书查询子窗体1”上的窗体页脚引用到主窗体上。新建一个文本框,右击,选择属性,在“数据”选项卡的“控件来源”里右击,选择生成器(或在右侧三个点的按钮上点击进入),按前面方法操作:

咦,“存书查询子窗体1”的控件呢?是的,不见了。——因为这是数据表窗体(如果是单个窗体则不存在这个问题)。所以,如果需要引用它的“txt计数”,我们需要手动加上控件名。这是完成后的结果,显然是一致的:

这里还留了一个,引用“存书查询窗体1”的“计数”,算是交给大家的作业吧,有兴趣的不妨做一下。

最后,希望看完这个帖子的版友,从此再也不会因为这种问题而困扰。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 21:32 , Processed in 0.128881 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表