Office中国论坛/Access中国论坛

标题: 【小技巧】如何引用子窗体的控件 [打印本页]

作者: roych    时间: 2020-3-26 00:52
标题: 【小技巧】如何引用子窗体的控件
在实际工作中,需要引用子窗体甚至孙窗体的控件的情形并不罕见。但对于刚刚接触窗体的新手而言,可能一脸蒙圈,为啥这样引用就会出现“#名称?”错误,到底错在哪里?
作为Access的经典范例,《刘小军常用窗体查询》里其实提过的(如下图):

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

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

我们先把查询,窗体复制一份出来,分别重命名,并按前面那样。从“所有窗体”里修改好查询语句:
[attach]63664[/attach]
接下来,我们打开这个“存书查询窗体1”,随意查询一下,发现是正常的:
[attach]63665[/attach]
接着,我们创建一个测试窗体,把这个“存书查询窗体1”拖进去,保存后,再打开测试窗体看看出现什么情况:
[attach]63666[/attach]
开始要求我们输入参数值了。这时候,我们可以先依次点击取消,结果出现“#名称?”错误,存书查询子窗体1对应的区域出现空白:
[attach]63667[/attach]
显然,我们所引用的控件出现了问题。那么,我们只能重新来处理表达式了。
接下来,我们来看看,从“加载的窗体”里完成,看看是什么情况。
先用在设计模式下打开“测试窗体”,右击查询窗体,选择生成器,再依次点击:加载的窗体\测试窗体\存书查询窗体1\书名\<值>(见生成器下方树形菜单),结果如下所示:
[attach]63669[/attach]
留意到新旧表达式的不同了么?接下来,我们按新的表达式来修改查询,然后看看结果如何:
[attach]63670[/attach]
居然就这样解决了。是不是很神奇?

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

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

现在我们回到主题,把“存书查询子窗体1”上的窗体页脚引用到主窗体上。新建一个文本框,右击,选择属性,在“数据”选项卡的“控件来源”里右击,选择生成器(或在右侧三个点的按钮上点击进入),按前面方法操作:
[attach]63671[/attach]
咦,“存书查询子窗体1”的控件呢?是的,不见了。——因为这是数据表窗体(如果是单个窗体则不存在这个问题)。所以,如果需要引用它的“txt计数”,我们需要手动加上控件名。这是完成后的结果,显然是一致的:
[attach]63672[/attach]
这里还留了一个,引用“存书查询窗体1”的“计数”,算是交给大家的作业吧,有兴趣的不妨做一下。
[attach]63673[/attach]
最后,希望看完这个帖子的版友,从此再也不会因为这种问题而困扰。






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3