Form 控件的多种引用区别
时 间:2015-04-02 01:02:18
作 者:何保辛 ID:22003 城市:深圳
摘 要:Me!学号 与 Me.学号 与 Me("学号") 到底有多大的差别?
正 文:
今年Access VBA 的 引擎强化了,反而让开发人员搞乱了 窗体和控件 对象引用符号了!
很久远以前,Access 内置对象有所谓的 集合 Collection 对象,Access VBA 自2.0版本开始就有个 感叹号符号,方便大家引用集合里面的某一个元素。
Access 内置对象中所有的集合,就像一个数组的强化版:像数组的,我们以下标获得某一个元素;强化的是我们的下标 是可以用
- 数字(在集合里面的位置),或
- 文本名字,来参考出某一个元素。
大家非常熟识的集合会有
Forms Reports
而我们参考某个 表单就会用 Forms!录入表单 这是 Forms("录入表单") 的简化版,意思是 以 “录入表单” 作为下标在集合里面找出元素,这是容易理解的。
往下一层了: Forms!录入表单!用户名 呢? 近年比较少人用这种表达式了
其实这是 名称为 “录入表单” 的表单中,名称为 “用户名” 控件。
根据Access设计鼻祖,这代表着
表单对象 下 一个默认集合 里的 一个元素 的简写,全写应该是
Forms!录入表单.Controls("用户名") ----- 这原来就是 Forms!录入表单!用户名 正解。
Access VBA 的 Form 类设计,就设置了一个默认集合 -> Controls,所以对所有 Form 对象用上 ! 就是默认从 Controls 属性这个集合中索引一个对象出来。
Access Objects 的架构中相同的 默认属性 类有
DAO.Recordset
DAO.Relation
References
.....
DAO.Recordset :
Set rs = currentdb().open("学生")
a = rs!学号 ' 就会完全等同 rs.fields("学号") ,也是同样的道理
如果你看对象浏览器的话,你会看到
Property Fields As Fields
只读
DAO.Recordset 的缺省成员 <---- 缺省成员就是这个意思了!
Property Value As Variant
Access.TextBox 的缺省成员 <---- 这个就代表 如果你有一个 TextBox 对象是 tb 的话,tb="123“ 等价于 tb.value="123"
近年,让我们有所混淆的就是 表单的空间可以用 点号来引用(这是VB开发人员跟 Access 开发团队申辩过后才提供的功能)
Me!学号 用 Me.学号 同样通用!
Form 对象在 好像 2003 还是 2007 做了这个扩展,我们在 Form 对象(注意不是 Forms) 添加的控件
Forms!学生.Controls 集合里 添加了 Name 为 "学生" 的控件后,
VBE 同时在 Forms!学生 对象扩展了 一个 类属性 学生,同时指向 .Controls("学生") 元素,(至少指针所耗内存不多)
所以我们在 VBE 编写代码的时候,就可以 Me.学生 引用该个控件了,方便了大家编写代码了!
如果,”学号” 控件是拖放在 表单的主体内的话,在内存里 Forms!学生.Controls("学号") 这个对象同时被
Forms!学生.Controls("学号") Forms!学生.学号 Forms!学生!学号 Forms!学生.Controls("学号") Forms!学生.Section(0).Controls("学号") Forms!学生.Section("主体").Controls("学号")
那么多解析同时指向同一个控件。
不过注意,以下这些是不存在的:
Forms!学生.Section(0).学号 Forms!学生.Section("主体").学号
原因是Access 并没有对 Section 对象 建立类属性的 快捷键!
说了那么多,如果你已经看懂了话,你就理解这一句代码有什么事情在发生了!
a = Forms!城市!美食.form!餐厅.form!评论.form!赞同会员.form!会员靠谱指数
那么复杂的代码,每人会用的,只是我们需要了解
1. Me!学号 与 Me.学号 虽然指向一样,但是是两个意思
如果表单里面没有 “学号” 这个控件
Me!学号 是不会报错的,因为这是运行时的代码;而
Me.学号 是 设计时 的解析,当表单上没有这个控件,基本上已经报错了!
所以,Me.学号 运行起来一定会快速一点!因为编译能通过的话,代码编译后对象的参考位址已经固话到代码里了。
2. Me!学号 如果在不考虑运行速度的损耗的话,代码的观赏性会高很多。
3. Me("学号") 基本上会与 Me!学号 运行速度一致的,都是在编译的时候,把字符串固话到编译后代码,在运行时在集合里用文字来查找;但是一般我们用 Me( string) 的情况是,我们会用变量,就是连运行的时候,我们都不确定 用户选择了哪个控件的情况下使用;又或者在一些根据数据创建控件的应用里,才会用到最低效率的 Me(n) 表达式。
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)