FactoryClass的公共实例

时间:2018-11-27 12:24:38

标签: excel vba

我创建了两个类,一个用于我需要的对象(动作),第二个作为工厂类,用于跟踪我通过数组创建的每个类的每个实例(ACTIONS(),OTHER(),等())。

操作是通过用户表单和工厂创建的。

我该怎么做,以便另一个用户窗体可以使用同一工厂(我需要数组)(第一个用户窗体用于创建操作,第二个对ActionFactory操作数组进行排序)?

我无法在两个表单之间共享我的ActionFactory,但声明为public会返回错误。我觉得我缺少明显的东西。

子问题:什么是最好的设计->工厂类或工厂方法本身?

编辑其他信息 这是我从用户窗体

创建Action对象的方法
Option Explicit
Private ActionFactory As New Factory

Private Sub CommandButton1_Click()
    Dim test As Action
    Set test = ActionFactory.CreateAction(Tit.value, ComboBox1.ListIndex, ComboBox2.ListIndex, Startdate.value, EndDate.value, Owner.value)
    test.draw
    Dim act() As Action
    act = ActionFactory.GetTheActionsArray
    Debug.Print UBound(act)
End Sub

这是我的工厂,也是Actions数组和创建者

Option Explicit
Private ACTIONS() As Action
Private OTHERS() as Other
Private counter As Integer

Public Function CreateAction(t As String, d As Integer, c As Integer, std As String, edt As String, ownr As String) As Object
    counter = Sheets(Sheets.Count - 1).Cells(1, 1).value
    ReDim Preserve ACTIONS(counter)
    With New Action
        .SetTitle = t
        .SetDepartement = d
        .SetCategory = c
        .SetStartdate = std
        .SetEndDate = edt
        .SetOwner = ownr
        .SetIndexValue = counter
        Set ACTIONS(counter) = .Self
        Set CreateAction = .Self
    End With
    Sheets(Sheets.Count - 1).Cells(1, 1).value = Sheets(Sheets.Count - 1).Cells(1, 1).value + 1
End Function 

代码有效,我无法管理的是在另一个userform1用户窗体上检索存储在ActionFactory的ACTIONS()中的值。

这也使我想到了另一个问题。 如何在Factory类上摆脱该计数器。 我希望使用:

If ACTIONS() =  null Then
    ReDim ACTIONS(0) 
Else
    ReDim preserve ACTIONS(ubound(ACTIONS) + 1)
end if

显然,这不起作用。 BR 鲍勃

0 个答案:

没有答案