繁体   English   中英

VBA连续类对象参考

[英]VBA Successive Class object reference

我正在研究一个VBA项目,该项目可用于计算通过管道系统的气流特性。 风管系统由存储在由clsSegments类存储的Collection中的多个Segment(VBA类; clsSegment)组成。

每个段都有一个Duct类(clsDuct),该类由clsDuctDim类定义的Inlet和Outlet组成。

如果我要段号。 2进气管继承了段号的属性。 我使用的1个风管:

set Segments(2).Duct.Inlet = Segments(1).Duct.Outlet

这可行。

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

set segments(2).Duct.Outlet = segments(2).Duct.Inlet

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

set Segments(3).Duct.Inlet = Segments(2).Duct.Outlet
set Segments(3).Duct.Outlet = Segments(3).Duct.Inlet

这会导致3号段实际上指向3号段。 ñ。 如果我在段2和1之间断开引用,则段3仍指向段1。这不是我想要的。 我希望段3指向段2。我想我要尝试的是指向一个指针,而不是指向存储段1数据的实际内存位置。

如何做到这一点?

在VBA中没有直接的方法可以做到这一点。 一个简单的解决方法是向您的clsSegment类添加一个Copy或Clone方法。

细分(3)。复制细分(2)

Sub Copy(segement As clsSegment)
    Me.Duct.Outlet = segement.Duct.Inlet
    Me.Duct.Inlet = segement.Duct.Outlet
End Sub

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

clsSegment

Enum DuctEvents
    deInletRemoved
    deOutletRemoved
End Enum

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

类clsDuctDim

Public Event DuctRemoved()

Private Sub Class_Terminate()
    RaiseEvent DuctRemoved
End Sub

类clsDuct

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类中添加了一个枚举,以清理消息传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM