gpt4 book ai didi

VBA 连续类对象引用

转载 作者:行者123 更新时间:2023-12-04 20:59:58 25 4
gpt4 key购买 nike

我正在开发一个 VBA 项目,该项目可用于计算通过管道系统的气流属性。管道系统由存储在由类 clsSegments 存储的集合中的多个段(VBA 类;clsSegment)组成。

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

如果我想要段号。 2 Inlet Duct 继承 Segment no. 的属性。我使用的 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 段。 n.如果我打破了 Segment 2 和 1 之间的引用,Segment 3 仍然指向 Segment 1。这不是我想要的。我希望第 3 段指向第 2 段。我想我要做的是指向一个指针,而不是指向存储第 1 段数据的实际内存位置。

如何做到这一点?

最佳答案

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

Segments(3).Copy Segments(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 类中添加了一个 Enumeration 来清理消息。

关于VBA 连续类对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com