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)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(13)-入库功能...(04.21)
- Access控件美化之--美化按钮...(04.19)
- Access多行文本按指定字符筛选...(04.18)
- Microsoft Access数...(04.18)
- 仓库管理实战课程(12)-月度结存...(04.16)
- 仓库管理实战课程(11)-人性化操...(04.15)
- 32位的Access软件转化为64...(04.12)
- 【Access高效办公】如何让vb...(04.11)
- 仓库管理实战课程(10)-入库功能...(04.08)
- Access快速开发平台--Fun...(04.07)