VB6.0之Collection---Collection集合类
参考一: VB之Collection---Collection集合类你看到的这个文章来自于http://www.cnblogs.com/ayanmw 由于要对一些数据进行处理,比较麻烦,实现某个算法要处理大量不同的不同类型的数据。 所以考虑到一些因素,又在使用VB6(可惜微软不支持VB6了,改为DotNet框架了 ),所以使用 VB6 自带的 Collection集合(类) 最好。 其实Collection 也是有Key 和 Value一一对应的关系的。而且 还有 ID 顺序。 现在不是流行 key-value的数据库么,collection如果可以保存到文件,那么不久完美了么?? 反正 现在当作 key value的实时处理数据的库来用 还是很好的。 从VB6的 《类生成器实用工具》 创建 collection挺方便,唯一不方便的是,默认不把 collection当作类来使用。其实 这就是一个类而已么。一般collection只有一个就行,add多个元素。但是collection也可以 创建多个,就是collection下有collection,下又有 一些 class,复杂程度稍微高一点。 下面是一个简单的collection配合一个class的例子。 'FileName : OneKeyCls.cls 'FileName : OneKeyCol.cls 使用范例: Dim Cars New OneKeyCol Cars.Add 10.1",2" Cars.Add 10.22010.3200key" Debug.Print Count:" & Cars.Count Debug.Print Cars.Item(").Key Debug.Print TypeName(Cars.Item(300")) Error Nothing Dim i Dim key1 按照 index 索引 进行遍历,效率要比下面的方法低一点 For i = 1 To Cars.Count Set key1 = Cars.Item(i) Debug.Print key1.Key Next 推荐这种遍历方法 For Each key1 In Cars Debug.Print key1.Key Next 一下为稍微整理下VB6的 collection 的转载。 Visual Basic 集合对象() Public colDocuments 建立新的 MDI 子文档窗体的代码。
Sub mnuFileNew()
Dim f New mdiDocument
Static intDocumentNumber Integer
intDocumentNumber = intDocumentNumber 1
下面的语句创建窗体。
f.Caption = Document" & intDocumentNumber
给集合添加对象引用。
colDocuments.Add f
f.Show
colDocuments 的作用象是内置窗体集合的一个子集,它只包含窗体 mdiDocument 的一些实例。每添加一个新窗体,自动调节集合的大小。可使用 For Each ... Next 在集合内进行迭代。如果赋予窗体一个可以检索的键,那么可提供一文本字符串作为 Add 方法的第二个参数,如本节后面部分所述。 在变量 colDocuments 的声明中,New 关键字导致当该变量第一次被引用时,在代码中创建集合对象。因为集合是类,而不是数据类型,所以必须建立集合实例,并且在变量中记录对该实例(对象)的引用。
Collection 对象将每一项存储于 Variants 对象中。于是,能够添加到 Collection 对象里的内容列表就和能够存储到 Variants 中的内容列表是相同的。这包括标准数据类型、对象和数组- 但不包括用户定义类型。
每个集合对象都有属性和方法,使用它们能够插入、删除和检索该集合中的项。 属性或方法 描述
Add 方法 给集合添加项。
Count 属性 返回集合中项的数目。只读。
Item 方法 通过索引或关键字,返回项。
Remove 方法 通过索引或关键字,从集合中删除项。
这些属性和方法仅仅是集合最基本的功能。例如,要确保集合只包含一种对象,Add 方法并不能检查将要添加到集合里的对象类型。通过建立自己的集合类能够提供更强健的功能,以及额外的属性、方法和事件,正如本章后面的“创建自己的集合类”中所述。 集合中的增加、删除和检索的基本功能需要关键字和索引。关键字是一个 String 的值。它可以是能转换成字符串的名字、驾驶执照号、社会安全号或者简单的整数。Add 方法允许将关键字与项相关联,如本节后面部分所述。 Dim lngCt Long
For lngCt = To mcolEmployees.Count
mcolEmployees(lngCt).Rate = _
mcolEmployees(lngCt).Rate * 1.1
Next
Dim emp As Employee
Each emp In mcolEmployees
emp.Rate = emp.Rate *
Sub Add (item As Variant [,key As Variant] [,before As Variant]
[,after As Variant] )
例如,使用工作定单 ID 属性作为关键字,将工作定单对象添加到工作定单集合里,代码可编写为: colWorkOrders.Add woNew,woNew.ID 这里假定 ID 属性是字符串。如果属性是数字(例如 Long),则应使用 CStr 函数将它转换成关键字所要求的字符串值: CStr(woNew.ID)
Add 方法支持命名的参数。为了添加一项作为第三个元素,代码可编写为: 2
可以使用 before 和 after 命名的参数管理有序的对象集合。例如,before:=1 将在集合的开始插入一项,因为集合对象是基于 1 的。 从集合中删除项 object.Remove index
index 参数可以是所删除项在集合中的位置,或者是该项的关键字。如果集合中第三个元素的关键字是“W017493”,则可使用这两条语句中的任何一条删除它: colWorkOrders.Remove 3 - 或 - colWorkOrders.Remove W017493"
从集合中检索项 Item 方法用于从集合中检索特定项。语法是: [Set] variable = object.Item(index) 和 Remove 方法一样, index 可以检索项在集合中的位置,或者是该项的关键字。使用 Remove 方法中的相同示例,这两条语句中的任一条都可检索集合中的第三个元素: Set woCurrent = colWorkOrders.Item(3)
- 或 -
")
如果使用整数作为关键字,在将它们传递到 Item 或 Remove 方法之前,必须使用 CStr 函数将其转换成字符串。通常集合对象都假定整数是索引。 提示 Collection 对象不能决定所传递的值是索引还是键。如果想把值解释为键,并且包含该值的变量是除 String 以外的任何值,可以使用 CStr 函数进行转换。如果想把值解释为索引,并且包含该值的变量不是整型数据类型中的一种,使用 CLng 进行转换。 Set woCurrent = colWorkOrders(")
重点 当添加和删除集合对象元素时,集合对象会自动地维护其数字索引编号。因此给定元素的数字索引随之改变。不能在程序中存储数字索引值,并用它检索同一个元素。为达到该目的,应使用键。 使用 Item 方法调用属性和方法 colWorkOrders.Item(").Priority = 3 colWorkOrders(3 可行的原因是 Visual Basic 要从左到右计算表达式。当遇到 Item 方法时- 显式的或隐式的- Visual Basic 为指定的项(此时是键为 W017493 的 WorkOrder 对象)取得一个引用,并使用该引用计算该行的其余部分。 提示 如果想调用集合中对象的多个属性或方法,首先将该对象引用复制到一个强类型的对象变量中。把引用放到一个强类型的对象变量中,然后使用,比使用集合里对象的引用要快(例如,Dim woCurrent As WorkOrder),因为 Collection 对象是把项存储在 Variants 中。 Variants 中的对象引用总是最后绑定。
一般可以采取三种办法用集合来实现对象包含。以上面“对象模型”中所讨论的 SmallBusiness 对象的 Employees 集合为例。为了实现该集合,可以这样做: 转自:http://blog.sina.com.cn/s/blog_4b168e640100lbma.html 转载请注明出处:http://www.cnblogs.com/ayanmw 我会很高兴的! ------------------------------------------------------------------------------------------------ 一定要专业!本博客定位于ArcGIS开发,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。.
参考二: Collection 的用法 建立集合的方法和建立其它對象一樣,如: 集合建立後,可以使用Add方法添加成員,用Remove方法刪除成員,用Item方法從集合中返回特定成員。 Private Sub Command1_Click() 上面的代碼先將窗體上所有的TextBox加入到集合中,然後再刪除掉。Count屬性返回集合的成員數量,Remove方法後面的參數是集合成員的索引號。成員的索引號通常是按照加入的順序自然編號,從1開始,但可以在加入時使用Add方法的參數進行改變。Add方法的完整語法是:
Collection除了收集之外也能將其實體化,接下來再看這下面這一例, Option Explicit 再看一例會更清楚,這是利用class來演示資料傳輸及收集。 Family Family class與 Child class的關係是一對多的關係。為了簡化class之間的關係,我們增加了一個Children class,Children類是Child class的集合,因此 Family class與Children class直接關聯,形成一對一的關係。
1Option Explicit 2Public Name As String 3Public BirthDay As Date 4Public Sex As Boolean 5 01Option Explicit 2Private mcolChildren As New Collection 3Public Property Get Count() As Long 4Count = mcolChildren.Count 5End Property 6Public Function Add(ByVal Name As String,ByVal BirthDay As Date,ByVal Sex As Boolean) As Child 7Dim empNew As New Child 8Static intNum As Integer 9With empNew 10intNum = intNum + 1 11.Name = Name 12.BirthDay = BirthDay 13.Sex = Sex 14mcolChildren.Add empNew 15End With 16Set Add = empNew 17End Function 18Public Function Item(ByVal Index As Variant) As Child 19Set Item = mcolChildren.Item(Index) 20End Function 21 1Private mChildren As New Children 2Public Property Get Children() 'As Children '回傳至Childrenclass 3Set Children = mChildren 4End Property 2Public sbMain As New Family 3'開始收集 4Private Sub cmdAddChild_Click() 5'使用Childrenclass的Add方法 6sbMain.Children.Add CStr(txtName.Text),CDate(txtBirthDay.Text),CBool(txtSex.Text) 7End Sub 8'List收集視窗 9Private Sub cmdListChild_Click() 10Dim emp As New Child 11Dim i As Long 12lstChild.Clear 13For i = 1 To sbMain.Children.Count 14Set emp = sbMain.Children.Item(i) 15lstChild.AddItem emp.Name &","& emp.BirthDay && emp.Sex 16Next 17End Sub (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |