首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA连续类对象引用

VBA连续类对象引用
EN

Stack Overflow用户
提问于 2016-07-05 19:28:34
回答 1查看 53关注 0票数 2

我正在处理一个VBA项目,该项目可用于计算风管系统中气体流动的特性。风管系统由多个管段( VBA类;clsSegment)组成,这些管段存储在由类clsSegments存储的集合中。

每个管段都有一个风管类(clsDuct),它由类clsDuctDim定义的进水口和出水口组成。

如果我希望2号分段进风风管继承1号分段出口风管的特性,我使用:

代码语言:javascript
复制
set Segments(2).Duct.Inlet = Segments(1).Duct.Outlet

这是可行的。

同样,我可以通过以下方式选择使用入口风管作为出口风管:

代码语言:javascript
复制
set segments(2).Duct.Outlet = segments(2).Duct.Inlet

现在如果我想要段号。n+2来做同样的事情,我写道:

代码语言:javascript
复制
set Segments(3).Duct.Inlet = Segments(2).Duct.Outlet
set Segments(3).Duct.Outlet = Segments(3).Duct.Inlet

这会导致3号段实际指向3号段。n.如果我打破段2和段1之间的引用,段3仍然指向段1。这不是我想要的。我希望Segment 3指向Segment 2。我猜我要做的是指向一个指针,而不是指向存储segment 1数据的实际内存位置。

如何才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2016-07-05 19:45:14

在VBA中没有直接的方法可以做到这一点。一种简单的解决方法是将复制或克隆方法添加到clsSegment类中。

数据段(3).Copy数据段(2)

代码语言:javascript
复制
Sub Copy(segement As clsSegment)
    Me.Duct.Outlet = segement.Duct.Inlet
    Me.Duct.Inlet = segement.Duct.Outlet
End Sub

可以通过添加自定义事件和设置对父对象的引用来自动进行更改。我不确定这将如何应用于您的系统,但这里有一个简单的通知系统。

clsSegment

代码语言:javascript
复制
Enum DuctEvents
    deInletRemoved
    deOutletRemoved
End Enum

Public Sub DuctChanged(e As DuctEvents)
    'Do Something
End Sub

类clsDuctDim

代码语言:javascript
复制
Public Event DuctRemoved()

Private Sub Class_Terminate()
    RaiseEvent DuctRemoved
End Sub

类clsDuct

代码语言:javascript
复制
Public parent As clsSegment
Private WithEvents Inlet As clsDuctDim
Private WithEvents Outlet As clsDuctDim

Private Sub Inlet_DuctRemoved()
    parent.DuctChanged (deInletRemoved)
End Sub

Private Sub Outlet_DuctRemoved()
    parent.DuctChanged (deOutletRemoved)
End Sub

我向clsSegment类添加了一个枚举来清理消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38202306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档