编写了一段在listbox中拖拽显示文件名的程序,如下:
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Clear
If Data.GetFormat(vbCFFiles) Then
Dim objFile
For Each objFile In Data.Files 'datafiles类型为DataObjectFiles
List1.AddItem objFile.Count
Next objFile
End If
End Sub
该段程序可以正常运行并实现功能,在程序中(红色部分),objFile被定义为了variant类型。
根据vb的定义,data.files是一个集合,它的类型为DataObjectFiles,但是如果把红色部分的定义改为:Dim objFile as DataObjectFiles,程序就会运行错误,而且即使改为Dim objFile as New DataObjectFiles也不行。自己查了下,很多程序在用For each next应用对象时都是定义为variant类型,请问如果我要指明类型改如何编写呢?
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Clear
If Data.GetFormat(vbCFFiles) Then
Dim objFile
For Each objFile In Data.Files 'datafiles类型为DataObjectFiles
List1.AddItem objFile.Count
Next objFile
End If
End Sub
该段程序可以正常运行并实现功能,在程序中(红色部分),objFile被定义为了variant类型。
根据vb的定义,data.files是一个集合,它的类型为DataObjectFiles,但是如果把红色部分的定义改为:Dim objFile as DataObjectFiles,程序就会运行错误,而且即使改为Dim objFile as New DataObjectFiles也不行。自己查了下,很多程序在用For each next应用对象时都是定义为variant类型,请问如果我要指明类型改如何编写呢?
解决方案 »
- VB怎么用正则取多行文本
- 如何将RichTextBox中的图文数据存入Sql Server
- 如何将DBGRID中的内容导出到文本或EXCEL中?
- 哪位大侠能推荐一本网上的关于VBA的书。
- 求记事本代码。
- 怎样在vsView中自制报表头???
- VB 驱动器控件 光驱
- 怎样在vb中用insert ,updata语句进行数据库操作??????????
- 一个关于SSTab控件的问题?
- 如何在局域网上用VB6的OpenDataBase方式以只读形式访问Access数据库
- 求vb中错误424 下标越界 解决办法((刚注册就20分全数奉上)求高人帮个忙,不胜感激!)
- 100分,一个RECORDSET变量重复赋值的问题
for each枚举的data.files的成员并不是DataObjectFiles类型。所以不能用DataObjectFiles类型。
--------------------------
MSDN:For Each element In group
[statements]
[Exit For]
[statements]
element 必要参数。用来遍历集合或数组中所有元素的变量。对于集合来说,element 可能是一个 Variant 变量、一个通用对象变量或任何特殊对象变量。对于数组而言,element只能是一个 Variant 变量。
-----------------------------
也就是说:element只能是variant变量或对象变量。
2、因为element(看1楼)只能是variant变量或对象变量,这里不能是对象变量,所以只能用variant变量。
Option ExplicitDim col As New CollectionPrivate Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Clear
If Data.GetFormat(vbCFFiles) Then
Dim i As Long
For i = 1 To Data.Files.Count
col.Add Data.Files(i)
Next
Dim a As Variant
For Each a In col 'datafiles类型为DataObjectFiles
List1.AddItem col.Count
Next
End If
End Sub
Option Explicit'局部变量,保存集合
Private mCol As CollectionPublic Function Add(Balance As Currency, AccountNumber As Integer, FullName As String, colAcc As colAcc, Optional sKey As String) As CAccount
'创建新对象
Dim objNewMember As CAccount
Set objNewMember = New CAccount
'设置传入方法的属性
objNewMember.Balance = Balance
objNewMember.AccountNumber = AccountNumber
objNewMember.FullName = FullName
Set objNewMember.colAcc = colAcc
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 CAccount
'引用集合中的一个元素时使用。
'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 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