VB基础问题,一个类怎样调用另一个类??

yoursky 2001-07-21 10:54:29
的两个类(class)都在一个项目里,现在其中一个类(class!)要调用另一个类(class2),
在class1里我是这样调用的:
private aa as class2
Public Property Get bb() As class2
Set aa = New class2
Set bb=aa
End Property

然后就在class1其它function or sub里调用class2
但出错:
Operation is not allowed when the object is closed.

我是第一次来这里,给我一个留住我的理由吧!

...全文
412 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
small_pig 2001-07-23
  • 打赏
  • 举报
回复
一个类调用另一个类,这就是类的多态的表现,只要在另一个类中加入IMPLEMENTATION另一个类的属性,可在本类的下拉框中选取了。
这可是高技术,要收费地
Strator 2001-07-23
  • 打赏
  • 举报
回复
可以用类生成器,先生成子类,然后在生成父类里选择变量的类型为子类就行了,这里有一段代码是类生成器自动生成的代码。其中FtuDataType、PowerGisType 、AlarmGisType 分别是子类
'保持属性值的局部变量
Private mvarScadaData As FtuDataType '局部复制
Private mvarPowerData As PowerGisType '局部复制
Private mvarAlarmSoeData As AlarmGisType '局部复制
Private mvarTaskType As GisMInfoType '局部复制
Public Enum GisMInfoType
AlarmFtuConnt = 10 '通讯报警事件
AlarmFtu = 20 'FTU数据报警
AlarmPower = 30 'Power数据报警
AlarmFtuPower = 40 'Ftu+Power数据报警
InfoFtuStart = 50 '信息事件触发(Ftu)
InfoPowerStart = 60 '信息事件触发(Power)
InfoFtuPowerStart = 70 '信息事件触发(Ftu+Power)
NullFtuStart = 80 '信息事件触发(空数据Ftu)
NullPowerStart = 90 '信息事件触发(空数据Power)
NullFtuPowerStart = 100 '信息事件触发(空数据Power+Ftu)
AutoPollStop = 110 '系统自动停止中断采集
End Enum

Public Property Let TaskType(ByVal vData As GisMInfoType)
'向属性指派值时使用,位于赋值语句的左边。
'Syntax: X.TaskType = 5
mvarTaskType = vData
End Property


Public Property Get TaskType() As GisMInfoType
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.TaskType
TaskType = mvarTaskType
End Property




Public Property Set AlarmSoeData(ByVal vData As AlarmGisType)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.AlarmSoeData = Form1
Set mvarAlarmSoeData = vData
End Property


Public Property Get AlarmSoeData() As AlarmGisType
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.AlarmSoeData
Set AlarmSoeData = mvarAlarmSoeData
End Property



Public Property Set PowerData(ByVal vData As PowerGisType)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.PowerData = Form1
Set mvarPowerData = vData
End Property


Public Property Get PowerData() As PowerGisType
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.PowerData
Set PowerData = mvarPowerData
End Property



Public Property Set ScadaData(ByVal vData As FtuDataType)
'向属性指派对象时使用,位于 Set 语句的左边。
'Syntax: Set x.ScadaData = Form1
Set mvarScadaData = vData
End Property


Public Property Get ScadaData() As FtuDataType
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.ScadaData
Set ScadaData = mvarScadaData
End Property



Private Sub Class_Initialize()
Set mvarScadaData = New FtuDataType
Set mvarPowerData = New PowerGisType '局部复制
Set mvarAlarmSoeData = New AlarmGisType '局部复制

End Sub

DullMan 2001-07-21
  • 打赏
  • 举报
回复
两种解决办法:
1。修改 “private aa as class2”-->"private aa as new 鶥class2";去掉垃圾代码过程bb。
2。在class1的Initialize中为aa赋值:set aa=new class2

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧