如何 宣告(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倍)
.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倍)
解决方案 »
- 请教日历控件问题
- 天才
- 请高人指点一下我的小程序-计数程序(以分钟为单位显示运行时间)
- 谁有条形码和VB接口原代码
- 我用VB6 Webclass编写程序调试出现的错误?
- 串口发送大的数据量问题
- 菜鸟问题,百万火急! 如何在VB中的可视化数据管理器中新建一个Foxpro3.0数据库?
- dbgrid中怎么改变每一列的宽度?
- 如何将richtextbox 中的内容打印到picturebox 中,并在pictruebox中分页显示?(高手试试))
- SOS: 如何在Picture box的固定位置输出文字?急急急!
- 从开发体验性上看VS2010和VS2008的不同
- 用VB6 本人想做个游戏,急盼高手解决!
使用时用
Label1(0)
Label1(1)
Label1(2)
Label1(3)
来使用它们
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
必须能写为 Set Obj = Label1
这个方法我有用, 如下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) 里面的数据未必是最新的 )
这是这方法的缺点地方
要让 程序 架构不易写错误
如下Private Type AAAA
ID As Long
cName As STring
.....
.....
Obj As Label控件阵列型态
End Type我要把 Label 控件阵列 绑到 Type AAAA 里面
但是又不能让它影响到读取速度所以必须知道 Obj As Label控件阵列型态
这里的 Label控件阵列型态 到底要用什
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
窗体上放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
点击窗体上的按钮,试试
添加类模块→选择“类生成器”。在第二行有“添加新类”和“添加新集合”两个按钮,选择“添加新集合”。就可以来添加类的Collection。当然,这需要有个基础类。