您的位置:首页 > 编程语言 > VB

搬家(From Qzone) VB Collection对象的Add...>_<...

2006-05-09 19:13 357 查看
发表时间:2006年1月19日 4时44分

今晚很郁闷,竟然为了被ByRef耍了一晚上…

,终于在偶的n遍调试下终于发现是什么问题导致的.ho~~
爽!~做程序就是这样.我喜欢解决问题后的成就感..
这里呢我说一下Coolection的强大功能.可以add引用的东东.今晚就是被它耍了几个小时…nnd!!


事情是这样的..
我需要把程序返回的一个对象添加到集合对象里面去,在添加的时候呢我是这样写的:

Private Sub FillData(Subjects As Collection)
Dim temp As new clsItemQuestion
While Not myDBManager.rst.EOF
temp.Grade = CStr(myDBManager.rst!Grade)
temp.ID = CStr(myDBManager.rst!sub_id)
temp.Name = CStr(myDBManager.rst!sub_name)
Subjects.Add temp
myDBManager.rst.MoveNext
Wend
Set temp = Nothing
End Sub

一开始呢,我直接实例化一个类,然后为这个对象属性赋值,最后把这个对象添加到集合里面去.这里隐藏了一个很隐蔽的错误,就是集合对象存放的不是一个新的类,也就是说,它存放的就是开始实例化"Dim temp as new clsItemQuestion"这个对象,因为我只实例化了一个.所以在存放到里面之后呢,我发现无论我增加多少个,取出的数据个数虽然不会少,但里面的每一个数据都是最后一个添加进去的数据.也就是说当我第一次放进Grade=1,ID=2,Name=abc,下次再放进去的话,前一次放进的数据会跟着当前数据变化而变化,这是因为Collection集合对象是按引用存放的,集合里面虽然存放的对象越来越多,但终归为一个对象的引用.所以导致了所有数据(其实就是全部都是本身)都一样.要想添加对象进去,必须每次都实例化一个对象.这样的每个对象才是真正独立的对象.也就避免了上述的问题!解决代码如下:

Private Sub FillData(Subjects As Collection)
Dim temp As clsItemQuestion
While Not myDBManager.rst.EOF
Set temp = New clsItemQuestion
temp.Grade = CStr(myDBManager.rst!Grade)
temp.ID = CStr(myDBManager.rst!sub_id)
temp.Name = CStr(myDBManager.rst!sub_name)
Subjects.Add temp
myDBManager.rst.MoveNext
Wend
Set temp = Nothing
End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐