您的位置:逆风者 VB 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:30 来源:未知

本文章共3851字,分3页,当前第1页,快速翻页:
 
你迟早都要管理一组由VBA类模块创建的自定义对象,VBA Collection对象是实现这一目的的理想工具。我们在该杂志的Premiere期刊中曾经介绍过Collections,并且阐述了如何使用Collection对象来存储其他对象。虽然该项技术十分有用,但它确实还存在一些局限。在本文中,我们讨论了这些局限,并向你展示如何通过使用(你猜是什么)类模块来克服这些局限。
逆风编程技术

Collections中遇到的麻烦

Collections 对象中到底有什么问题呢?它似乎存储对象存储得非常好。事实上,它工作起来的确是太好了。Collections对象得最大问题是它可以存储到任何数据类型得引用,例如Integer, String, Long, Variant, 等 (见图1)。

当然,如果你能保证每个对象都具有相同得类型,并且具有相同得属性何方法的话,那么在Collection中处理对象就变得异常简单。例如,作为本月范例Excel VBA项目的组成部分,我们创建一个自定义的File类来代表一个磁盘文件。这个File类有几个属性,其中包括P ath, Size, 和 ShortName。如果你创建了一个File对象的Collection,那么你将希望这个Collection中的每个对象都具有这些属性。你可以毫无异议地使用与下面类似的代码:

' Print the size of the first file in the Collection.
Debug.Print colFiles.Item(1).Size

但是,如果colFiles Collection 中的第一个对象不是File,将会出现什么情况呢?如果它是一个Form 或 Control对象,又会怎样呢?如果它根本就不是一个对象呢?当然,当它试图执行该代码的时候,VBA将生成运行时间错误。



图1 (左)VBA Collection对象可以容纳任何类型的对象



图2(右) 创建一个Collection类来防止不想要的对象进入集合

输入Collection类

Collection 类 可以充当Collection对象的过滤器,限制你可以在里面存储的对象类型(如图2所示)。通过与你的应用程序中的Collection类(二不是Collection对象本身)的互相作用,你可以防止不想要的对象的进入。创建和使用Collection类允许你扩展Collection对象的属性和方法(后面我们将举例说明)。

为了说明Collection类以及如何创建一个Collection类,我们将使用带有通过扫描磁盘目录创建的文件集合的Excel 97项目。图3显示了一个表单,它用你选择了路径之后存储在自定义Collection类中的文件信息使得列表框通俗化。

这个表单使用一个叫做Files 的Collection类来通俗化列表框。在创建Collection的时候,以向你的VBA项目添加一个新的类模块作为开始,然后在这个新模块的声明段声明一个Private Collection对象。下面是来自Files类模块的声明:

' Collection of files.
Private pcolFiles As New Collection

为了将Collection对象与外界"隔绝",并阻止程序的其他部分用无用的东西填充它,必须将Collection对象声明为Private 。

复制所需要的方法

当然,一旦你已经将Collection 对象声明为Private,那么对于任何过程都没有办法向其中添加项目或从中删除项目了。因而,下一步就是复制Collection对象的标准方法了。尽管听起来象是做了大量额外的工作,实际上仍然在做我们前面所提及的"过滤"工作。

请记住,内建的Collection对象具有Add方法,该方法接受对象引用和独特的、包括文字与数字的标识符。如果你的应用程序正在直接使用Collection对象,那么它将极有可能创建对象的一个新的实例,并将其添加到Collection本身。

' Create a new instance of an object.
Dim objFile As New File
objFile.Path = "C:\AUTOEXEC.BAT"

' Add to a Collection object.
colFiles.Add objFile, objFile.ShortName

应用Collection类,应用程序调用该类的Add方法,传递任何必需的信息。请将先前的代码与Files类的Add方法做一比较:

With a Collection class, the application calls the Add method of the class, passing any required information. Contrast the previous code with the Add method of the Files class:
 
本文章更多内容1 - 2 - 3 - 下一页>>
相关文章

使用Data控件访问数据库
Visual Basic 的未来
VB中远程数据库的访问(3)-应用举例
VB 神童教程第四章第一节——菜单界面设计
用OLE自动化Outlook
在VB6.0中播放GIF动画
在VB中使用水晶报表的一种简易编程方法
递归过程在VB中的应用实例
用MDB文件做密码库
开发ADOCE搭配WinCE资料存取应用程序
Visual Basic界面设计大观
VB中超长OLE数据库字段的操纵方法
VB中多媒体五种控制手段
在VB中利用UDP协议编写聊天程序
在VB中用API实现多媒体
做出分隔线
功能强大的SendMessage函数
VB 神童教程第二章第十节——综合示例四
如何在VB6中导出EXCEL、FOXPRO格式的表
多用户应用程序中应注意问题3

相关评论


本文章所属分类:首页 VB

  热门关键字: