请问用 VB6 写一个 Class Box如何 让 "别人" 使用这个 Class 时可以用For Each I in Box
 .........
next

解决方案 »

  1.   

    For Each  in Box 
    next
    只能访问集合或数组
    将box写成数组或集合,就可以访问
      

  2.   

    For Each  in Box 
    next 
    只能访问集合或数组
    是对集合或数组的穷举
    但如果你想在类里面实现用户可以对你类的方法进行穷举基本没什么意义,也做不到
      

  3.   

    不知道你要的是不是如下所示:下面的类都是由类生成器生成的,没有作修改:类MyClass
    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
      

  4.   

    测试中 Set o = New MyClass 多余....
      

  5.   


    报告大大
    以下失败耶 ><"
    请检查一下
        '枚举    For Each o In obj
            Debug.Print o.MyName
        Next
        
      

  6.   

    设置参数传递窗体阿frm
    For Each I in frm.Box 
    ......... 
    next 
      

  7.   

    Hi ~  vbman2003 大大妳好已经 OK 了 , 谢谢呦=======================我想再问个问题这个源码中 涉及到相互引用相互引用的机制 让我看得一头雾水不知哪里可以看到原理教学或者哪里有更简单的实例来说明相互引用的机制
      

  8.   

    不是继承
    继承可以理解成类之间的类型和子类型关系。
    比如你想要写一个程序来记录学校中老师和学生情况。他们有一些共同属性,比如姓名 年龄和住址等等。他们也有各自的属性,比如教师的薪水、教龄等等,学生的成绩和班级等等。你可以为教师和学生建立两个独立的类来处理它们,但是这样做的话,如果要增加一个新的共有属性,就意味着要在这两个独立的类中都增加这个属性...一个比较好的方法是,创建一个包含他们共有属性的基类,比如有属性name,age,然后让教师和学生的类继承这个基类。即它们都是这个类型(类)的子类型,再为这些子类型添加自有的属性......
    VB是基于对象的,继承方面做的不好,有一说是VB不支持继承,也有说VB支持接口继承(网上有示例),对此我知道的不多....遇到上面所举的例子,似情况我也会写一个基类,然后在子类中引用这个基类来解决某些问题,不过这显然不是真正意义上的继承...
      

  9.   

    MSDN 中有介绍:mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN98\98VS\2052\vbcon98.chm::/Html/vbconcreatingyourownclasscollectionthehouseofbricks.htm