如何 宣告(Dim) 变量 = 控件阵列的 Type例如表单 Form1 上放入一个  Label1 并且复制 5 个Label1 就变为 控件阵列With Label1  ' 打入这个 可以看见有以下 4 各属性
   .Count
   .Lbound
   .Ubound
   .Item
End With'================================================请问如果我要写为如下Dim Obj As xxxx这里的 xxxx 要选什么, 才能使其和  "Label1 控件阵列" 的型态是一样的意即写 Obj.  时就会出现   .Count
   .Lbound
   .Ubound
   .Item4各属性这时可以写 Set  Obj = Label1
'== 注 ==不能用 Dim Obj As Object 或 Dim Obj As Variant
Set  Obj = Label1因为要 "大量且长时间运算" 用这个的话, 执行速度会影响 (变慢很多, 测试下慢 9倍)

解决方案 »

  1.   

    这个是控件数组,如果lz是在编辑时添加
    使用时用
    Label1(0)
    Label1(1)
    Label1(2)
    Label1(3)
    来使用它们
      

  2.   


    Private Type LabelType
        Count As Integer
        Lbound As String
        Ubound As String
        Item As String
    End Type
    Private Sub Command1_Click()
        Dim obj As LabelType
        
        With obj
            .Count
            .Item
            .Lbound
            .Ubound
        End With
    End Sub
      

  3.   

    必须要能够  Set Obj = Label1所以你的答案不对
      

  4.   

    请大大注意看清喔
    必须能写为 Set Obj = Label1
      

  5.   


    这个方法我有用, 如下Dim Buf(5) As Single
    Private Sub Label1_Change(Index As Integer)
      Buf(Index) = Label1(Index)
    End Sub但是我的 Label 是接收外部 DDE 的
    我发现当程序某些时间特别忙碌时
    即时 DDE 有接收到新数据
    但是 Sub Label1_Change 却没被执行 (因为来不及执行)
    所以 Buf(Index) = Label1(Index) 就会漏掉几次数据 ( 即 Buf(Index) 里面的数据未必是最新的 )
    这是这方法的缺点地方
      

  6.   

    问这问题关键于
    要让 程序 架构不易写错误
    如下Private Type AAAA
        ID As Long
        cName As STring
        .....
        ..... 
        Obj As Label控件阵列型态
    End Type我要把 Label 控件阵列 绑到 Type AAAA 里面
    但是又不能让它影响到读取速度所以必须知道     Obj As Label控件阵列型态
    这里的 Label控件阵列型态 到底要用什 
      

  7.   

    'Label1是一个控件数组
    debug.print typeName(Label1)    'Object个人认为vb6中的控件数组相当于一个泛型的Collection,但在vb6的代码里没办法声明为确切的类型,如:
    dim obj as Collection<Label>
    所以只好声明为Objectdim obj as Object
    set obj=Label1
    debug.print obj.Count
    Debug.Print TypeName(obj(0))    'Label
      

  8.   

    我想你要的是如下的结果吧?
    窗体上放1个按钮,4个label窗体代码:Private Type AAAA
        ID As String
        Name As String
        Labels As colLabel
    End Type
    Private Sub Command1_Click()
        Dim allLabels As New colLabel
        
        allLabels.Add Me.Label1
        allLabels.Add Me.Label2
        allLabels.Add Me.Label3
        allLabels.Add Me.Label4
        
        Dim a As AAAA
        
        a.ID = "Col1"
        a.Name = "这是第一个Label集合"
        Set a.Labels = allLabels
        
        Dim lb As Label
        
        Dim MSG As String
        For Each lb In a.Labels
            MSG = MSG & "Caption:  " & lb.Caption & "    Left: " & lb.Left & "  Height: " & lb.Height & vbCr
        Next
        
        MsgBox MSG
    End SubPrivate Sub Form_Load()
        Label1.Caption = "This is Label1"
        Label1.Left = 100
        Label1.Height = 500
        Label2.Caption = "My name is Label2"
        Label2.Left = 200
        Label2.Height = 600
        Label3.Caption = "Who is Lable3"
        Label3.Left = 300
        Label3.Height = 700
        Label4.Caption = "Where is Label4"
        Label4.Left = 400
        Label4.Height = 800
    End Sub添加一个类模块,名字为:colLabel,代码如下'局部变量,保存集合
    Private mCol As CollectionPublic Function Add(singleLable As Label, Optional sKey As String) As Label
        Dim objNewMember As Label
       
        '设置传入方法的属性
        If IsObject(singleLable) Then
            Set objNewMember = singleLable
        Else
            objNewMember = singleLable
        End If    If Len(sKey) = 0 Then
            mCol.Add objNewMember
        Else
            mCol.Add objNewMember, sKey
        End If
        '返回已创建的对象
        'Set Add = objNewMember
        Set objNewMember = Nothing
    End FunctionPublic Property Get Item(vntIndexKey As Variant) As Label
        '引用集合中的一个元素时使用。
        'vntIndexKey 包含集合的索引或关键字,
        '这是为什么要声明为 Variant 的原因
        '语法:Set foo = x.Item(xyz) or Set foo = x.Item(5)
      Set Item = mCol(vntIndexKey)
    End Property
    Public Property Get Count() As Long
        '检索集合中的元素数时使用。语法:Debug.Print x.Count
        Count = mCol.Count
    End Property
    Public Sub Remove(vntIndexKey As Variant)
        '删除集合中的元素时使用。
        'vntIndexKey 包含索引或关键字,这是为什么要声明为 Variant 的原因
        '语法:x.Remove(xyz)    mCol.Remove vntIndexKey
    End Sub
    Public Property Get NewEnum() As IUnknown
        '本属性允许用 For...Each 语法枚举该集合。
        Set NewEnum = mCol.[_NewEnum]
    End Property
    Private Sub Class_Initialize()
        '创建类后创建集合
        Set mCol = New Collection
    End Sub
    Private Sub Class_Terminate()
        '类终止后破坏集合
        Set mCol = Nothing
    End Sub
    点击窗体上的按钮,试试
      

  9.   

    Label是一个类,VB可以添加类的泛型集合。具体操作如下:
    添加类模块→选择“类生成器”。在第二行有“添加新类”和“添加新集合”两个按钮,选择“添加新集合”。就可以来添加类的Collection。当然,这需要有个基础类。