Office中国论坛/Access中国论坛

标题: COLLECTION与类模块的疑问 [打印本页]

作者: williamwangc    时间: 2013-2-18 15:56
标题: COLLECTION与类模块的疑问
本帖最后由 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变量未设置

作者: williamwangc    时间: 2013-2-18 16:19
我不知到这是为什么?会不会是CLASS_INITIALIZE事件未设置初始量?
作者: tmtony    时间: 2013-2-18 16:26
可否把建好的MDB传上来,我来测试一下
作者: williamwangc    时间: 2013-2-18 20:00
tmtony 发表于 2013-2-18 16:26
可否把建好的MDB传上来,我来测试一下

我单纯是为了测试类模块的方法,所以就随手用EXCEL做的实验,没用ACESS。
作者: 笑嘻嘻哦    时间: 2013-2-18 20:43
我也有很多疑问





















作者: williamwangc    时间: 2013-2-19 09:58
笑嘻嘻哦 发表于 2013-2-18 20:43
我也有很多疑问

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

上面这个用户可以不用怎么理会的,据我的观察,ta的回复基本都是在灌水……
作者: williamwangc    时间: 2013-2-19 13:06
本帖最后由 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
作者: roych    时间: 2013-2-19 13:49
本帖最后由 roych 于 2013-2-19 13:53 编辑
williamwangc 发表于 2013-2-19 13:06
感谢版主。我想把以上问题的尝试代码再调试一下之后,会贴出最新的代码,供大家讨论。不过我一直在纠结 ...

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


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


这个问题我已经解决。我在考虑类与类之间的引用。就是我前面纠结的细节。再次感谢版主。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3