簡體   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