看你知道不知道-VB6的模块之间循环关系
2006-04-19 12:50
459 查看
今天兄弟在调试程序的时候发现了一个有意思的现象,系统提示"模块之间循环关系",下面看看示例代码:
'cD
Option Explicit
Public Event ClickEvent()
Public WithEvents c As cE
Public Sub Click()
RaiseEvent ClickEvent
End Sub
Private Sub c_ClickEvent()
'
End Sub
'cE
Option Explicit
Public Event ClickEvent()
Public WithEvents c As cD
Public Sub Click()
RaiseEvent ClickEvent
End Sub
Private Sub c_ClickEvent()
'
End Sub
其实类cD 和cE的使用没有任何的错误,关键就是VB6本身的问题,就是两个带事件的类,可以相互引用,但是不能使用事件,如果去掉任何一个c_ClickEvent系统就没问题了.
后来我们采用了循环代理的方式,增加一个代理做为中介,系统依然这样提示.
最后的解决办法只能增机一个容器类,通过容器类来协调2个类的工作了,真是不优美,解决办法如下:
'cA
Option Explicit
Public Event ClickEvent()
Public Sub Click()
RaiseEvent ClickEvent
End Sub
'cB
Option Explicit
Public Event ClickEvent()
Public Sub Click()
RaiseEvent ClickEvent
End Sub
'cContainer
Option Explicit
Public WithEvents a As cA
Public WithEvents b As cB
Private Sub a_ClickEvent()
b.Click
End Sub
Private Sub b_ClickEvent()
a.Click
End Sub
'cD
Option Explicit
Public Event ClickEvent()
Public WithEvents c As cE
Public Sub Click()
RaiseEvent ClickEvent
End Sub
Private Sub c_ClickEvent()
'
End Sub
'cE
Option Explicit
Public Event ClickEvent()
Public WithEvents c As cD
Public Sub Click()
RaiseEvent ClickEvent
End Sub
Private Sub c_ClickEvent()
'
End Sub
其实类cD 和cE的使用没有任何的错误,关键就是VB6本身的问题,就是两个带事件的类,可以相互引用,但是不能使用事件,如果去掉任何一个c_ClickEvent系统就没问题了.
后来我们采用了循环代理的方式,增加一个代理做为中介,系统依然这样提示.
最后的解决办法只能增机一个容器类,通过容器类来协调2个类的工作了,真是不优美,解决办法如下:
'cA
Option Explicit
Public Event ClickEvent()
Public Sub Click()
RaiseEvent ClickEvent
End Sub
'cB
Option Explicit
Public Event ClickEvent()
Public Sub Click()
RaiseEvent ClickEvent
End Sub
'cContainer
Option Explicit
Public WithEvents a As cA
Public WithEvents b As cB
Private Sub a_ClickEvent()
b.Click
End Sub
Private Sub b_ClickEvent()
a.Click
End Sub
相关文章推荐
- 关于gcc、glibc和binutils模块之间的关系
- spring framework体系结构及内部各模块jar之间的maven依赖关系[即spring引入所需要的所有jar包]
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- 关于gcc、glibc和binutils模块之间的关系
- spring framework体系结构及内部各模块jar之间的maven依赖关系
- Windows Phone中解决多模块多程序集之间相互循环引用的问题一种思路
- Node如何处理模块之间的关系
- 关于gcc、glibc和binutils模块之间的关系
- OR1200各模块之间的连接关系图,使用VISIO绘制,理解源代码必备
- ThinkPHP中URL路径访问与模块控制器之间的关系
- 关于gcc、glibc和binutils模块之间的关系
- 关于gcc、glibc和binutils模块之间的关系
- 04.URL路径访问与模块控制器之间的关系
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结 .
- 数据小助手:数据库操作模块的几个类之间的关系
- ThinkPHP教程_PHP框架之ThinkPHP(二)【URL路径访问与模块控制器、URL四种模式、PATHINFO的两种模式、模板与控制器之间的关系】
- 好的架构就是--把模块与模块之间的直接关系均转换成通过架构来发生的间接关系
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- 关于gcc、glibc和binutils模块之间的关系
- 关于代码速度优化,MDK中 static 与优化级别与典型for循环之间的关系