设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2229|回复: 9
打印 上一主题 下一主题

[模块/函数] COLLECTION与类模块的疑问

[复制链接]
跳转到指定楼层
1#
发表于 2013-2-18 15:56:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 williamwangc 于 2013-2-18 16:16 编辑

在学习类模块的内容,正在学习类与类之间的构建关系和COLLECTION,在网上也找了许多文章。尝试写了2个类。不过没有成功,请各位大能帮忙。
原题目网址:http://wenku.baidu.com/view/1d280466f5335a8102d22002.html
原题目是这样的:
(一)构建两个类:
1.Student类
具有2个属性:
(1)Name:可读写。
(2)Id:可读写,但只能写一次。格式为字母S加两位整数,如S01,S02…等。
2.Students类
具有1个属性,3个方法,2个事件:
(1)Count属性:只读,返回Student成员数量。
(2)Item方法:使用下标如Stus.Item(i)的方式调用,返回相应的Student成员,i可以是Student成员的自然顺序,也可以是Student成员的Id。
(3)Add方法:增加Student成员。当增加成员时,按顺序递增生成成员的Id,每个Id号只用一次,不因删除成员受影响。
(4)Remove方法:删除Student成员。
(5)BeforeAdd事件:在增加成员前作出响应,允许用户取消增加成员。
(6)AfterRemove事件:在删除成员后响应。

建立Student类基本无问题。但在建立Students时出现了一些问题。
我应用COLLECTION类建立Students的一些对象。
如下面代码所示:

Stud类:
Private mstrName As String
Private mstrId As String
Public Property Get Name() As String
Name = mstrName
End Property
Public Property Let Name(strNewName As String)
mstrName = strNewName
End Property
Public Property Get Id() As String
Id = mstrId
End Property
Public Property Let Id(strNewId As String)
mstrId = Format(strNewId, "S00")
End Property

Studs类:
Private col As Collection
Public Function Add(strNewName As String, strNewId As String) As Stud
Dim st As New Stud
st.Id = strNewId
st.Name = strNewName
col.Add st, st.Id
Set Add = st
End Function
Public Property Get Count() As Integer
Count = col.Count
End Property

在模块1中建立了sub进行测试:
代码如下:
Sub t()
Dim st As Stud
Set st = New Stud
Dim sts As Studs
Set sts = New Studs
Set st = sts.Add("abc", "S02")
Debug.Print sts.Count
End Sub
结果出现了错误:对象变量或with变量未设置
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2013-2-18 16:19:03 | 只看该作者
我不知到这是为什么?会不会是CLASS_INITIALIZE事件未设置初始量?

点击这里给我发消息

3#
发表于 2013-2-18 16:26:30 | 只看该作者
可否把建好的MDB传上来,我来测试一下
4#
 楼主| 发表于 2013-2-18 20:00:53 | 只看该作者
tmtony 发表于 2013-2-18 16:26
可否把建好的MDB传上来,我来测试一下

我单纯是为了测试类模块的方法,所以就随手用EXCEL做的实验,没用ACESS。
5#
发表于 2013-2-18 20:43:51 | 只看该作者
我也有很多疑问




















6#
 楼主| 发表于 2013-2-19 09:58:17 | 只看该作者
笑嘻嘻哦 发表于 2013-2-18 20:43
我也有很多疑问

什么疑问?后来我把这个类模块的实验做成功了。把最后的申明事件的内容学习了 。大家可以探讨下。
7#
发表于 2013-2-19 10:35:39 | 只看该作者
williamwangc 发表于 2013-2-19 09:58
什么疑问?后来我把这个类模块的实验做成功了。把最后的申明事件的内容学习了 。大家可以探讨下。

上面这个用户可以不用怎么理会的,据我的观察,ta的回复基本都是在灌水……
8#
 楼主| 发表于 2013-2-19 13:06:54 | 只看该作者
本帖最后由 williamwangc 于 2013-2-19 13:30 编辑
roych 发表于 2013-2-19 10:35
上面这个用户可以不用怎么理会的,据我的观察,ta的回复基本都是在灌水……


感谢版主。我想把以上问题的尝试代码再调试一下之后,会贴出最新的代码,供大家讨论。不过我一直在纠结题目中一些细节的要求,不知如何写?
Item方法:使用下标如Stus.Item(i)的方式调用,返回相应的Student成员,i可以是Student成员的自然顺序,也可以是Student成员的Id。

这里的ID既可以是i,又可以是id,尤其在Add过程中id不能重复,这其中两个细节问题我很纠结。
第一个问题:id既可以自己写,又可以自然增加。这怎么处理?
第二个问题:id和自己写的Key要不重复。i
9#
发表于 2013-2-19 13:49:10 | 只看该作者
本帖最后由 roych 于 2013-2-19 13:53 编辑
williamwangc 发表于 2013-2-19 13:06
感谢版主。我想把以上问题的尝试代码再调试一下之后,会贴出最新的代码,供大家讨论。不过我一直在纠结 ...

不用了。根据我的理解,应该是Add的方法有问题,没有创建新的集。
不妨在Add里面加上一句:
Set col = New Collection
再试试。附件供参考:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
10#
 楼主| 发表于 2013-2-19 14:01:31 | 只看该作者
roych 发表于 2013-2-19 13:49
不用了。根据我的理解,应该是Add的方法有问题,没有创建新的集。
不妨在Add里面加上一句:
Set col =  ...


这个问题我已经解决。我在考虑类与类之间的引用。就是我前面纠结的细节。再次感谢版主。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-6 06:53 , Processed in 0.161746 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表