我创建了两个类,一个用于我需要的对象(动作),第二个作为工厂类,用于跟踪我通过数组创建的每个类的每个实例(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 鲍勃