请问用 VB6 写一个 Class Box如何 让 "别人" 使用这个 Class 时可以用For Each I in Box
.........
next
.........
next
解决方案 »
- 请教:用mscomm编写串口通讯,想做一个收发信号灯,收数据时灯亮,停止时灯灭,如何编写
- VB里面通过ADO连接Oracle数据库,执行查询语句,就是查不出结果,但是一模一样的SQL语句拿到PL/SQL Developer中却能查出结果,真是搞不明
- 能否给每一句做一个解释?谢谢
- 如何获取Excel数据的总行数
- 请问我怎么得到当前顶级窗口之下的那个窗口?
- 关于用SQL排序查找Access中记录
- 怎么在DataEnvironment里使用sql查询?
- 为什么我的在datagrid不出现水平滚动条??急!!请大虾帮忙(在线等待中)
- 我想在vb中将纸张尺寸定义成宽度15mm,高度77mm,如何实现将这样的纸张大小通过打印机打印出来?
- 如何捕获键盘事件
- 怎么用DIR 查询局域网的文件是否存在啊!!高手帮帮忙咯~~
- 怎么在MDIForm窗口中放置控件
next
只能访问集合或数组
将box写成数组或集合,就可以访问
next
只能访问集合或数组
是对集合或数组的穷举
但如果你想在类里面实现用户可以对你类的方法进行穷举基本没什么意义,也做不到
Option Explicit'保持属性值的局部变量
Private mvarMyName As String '局部复制
Private mvarMyClassBox As MyClassBoxPublic Property Get MyClassBox() As MyClassBox
If mvarMyClassBox Is Nothing Then
Set mvarMyClassBox = New MyClassBox
End If
Set MyClassBox = mvarMyClassBox
End PropertyPublic Property Set MyClassBox(vData As MyClassBox)
Set mvarMyClassBox = vData
End PropertyPrivate Sub Class_Terminate()
Set mvarMyClassBox = Nothing
End SubPublic Property Let MyName(ByVal vData As String)
'向属性指派值时使用,位于赋值语句的左边。
'Syntax: X.MyName = 5
mvarMyName = vData
End PropertyPublic Property Get MyName() As String
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.MyName
MyName = mvarMyName
End Property
下面是集合类MyClassBoxOption Explicit'局部变量,保存集合
Private mCol As CollectionPublic Function Add(MyName As String, MyClassBox As MyClassBox, Optional sKey As String) As MyClass
'创建新对象
Dim objNewMember As MyClass
Set objNewMember = New MyClass '设置传入方法的属性
objNewMember.MyName = MyName
Set objNewMember.MyClassBox = MyClassBox
If Len(sKey) = 0 Then
mCol.Add objNewMember
Else
mCol.Add objNewMember, sKey
End If
'返回已创建的对象
Set Add = objNewMember
Set objNewMember = NothingEnd FunctionPublic Property Get Item(vntIndexKey As Variant) As MyClass
'引用集合中的一个元素时使用。
'vntIndexKey 包含集合的索引或关键字,
'这是为什么要声明为 Variant 的原因
'语法:Set foo = x.Item(xyz) or Set foo = x.Item(5)
Set Item = mCol(vntIndexKey)
End PropertyPublic Property Get Count() As Long
'检索集合中的元素数时使用。语法:Debug.Print x.Count
Count = mCol.Count
End PropertyPublic Sub Remove(vntIndexKey As Variant)
'删除集合中的元素时使用。
'vntIndexKey 包含索引或关键字,这是为什么要声明为 Variant 的原因
'语法:x.Remove(xyz)
mCol.Remove vntIndexKey
End SubPublic Property Get NewEnum() As IUnknown
'本属性允许用 For...Each 语法枚举该集合。
Set NewEnum = mCol.[_NewEnum]
End PropertyPrivate Sub Class_Initialize()
'创建类后创建集合
Set mCol = New Collection
End SubPrivate Sub Class_Terminate()
'类终止后破坏集合
Set mCol = Nothing
End Sub下面是测试:Private Sub Command2_Click()
Dim o As MyClass
Dim obj As MyClassBox
Dim tmp As String
Dim i As Integer
'add
Set obj = New MyClassBox
For i = 1 To 100
Set o = New MyClass
tmp = "Name" & i
obj.Add tmp, obj
Next
'枚举
For Each o In obj
Debug.Print o.MyName
Next
Set o = Nothing
Set obj = Nothing
End Sub
报告大大
以下失败耶 ><"
请检查一下
'枚举 For Each o In obj
Debug.Print o.MyName
Next
For Each I in frm.Box
.........
next
继承可以理解成类之间的类型和子类型关系。
比如你想要写一个程序来记录学校中老师和学生情况。他们有一些共同属性,比如姓名 年龄和住址等等。他们也有各自的属性,比如教师的薪水、教龄等等,学生的成绩和班级等等。你可以为教师和学生建立两个独立的类来处理它们,但是这样做的话,如果要增加一个新的共有属性,就意味着要在这两个独立的类中都增加这个属性...一个比较好的方法是,创建一个包含他们共有属性的基类,比如有属性name,age,然后让教师和学生的类继承这个基类。即它们都是这个类型(类)的子类型,再为这些子类型添加自有的属性......
VB是基于对象的,继承方面做的不好,有一说是VB不支持继承,也有说VB支持接口继承(网上有示例),对此我知道的不多....遇到上面所举的例子,似情况我也会写一个基类,然后在子类中引用这个基类来解决某些问题,不过这显然不是真正意义上的继承...