如何直接在集合中实例化表单



我以多种方式使用"订购"表格(按订单号,按产品代码,客户,供应商,...)。它的每个实例都可以启动其新实例。

示例:

  • 此表格的第一个实例列出了特定顺序的所有顺序行
  • 在这种情况下,通过对产品ID进行双重销售,用户启动了此表单的第二个实例,列出了有关此特定产品的所有订单行
  • 通过在第二个实例中对客户代码进行双重销售,用户启动了第三个实例,该实例列出了有关此特定客户的所有订单行
  • 等等...

要实例化"订购"形式,我使用这种代码:

在"声明"模块中:

    Global cForms As Collection
    Global fForms(20) As Form

在呼叫形式中:

    x = boring_function_to_find_a_free_room_in_fForms()
    Set fForms(x) = New Form_OrderLines
    fForms(x).SetFocus
    cForms.add Item:=cForms(x), Key:=CStr(cForms(x).Hwnd)

我的问题是:而不是使用boring_function_to_find_a_free_room_in_forms()和fforms(x)来实例化表单,而是有任何方法可以在集合中"直接"实例化?

我尝试过:

    cForms.add Item:=(New Form_OrderLines)

它有效,但是:

1)每个新实例都关闭了上一个实例

2)我不知道如何编写"键:= cstr(cforms(x).hwnd)"

当您有收藏时您不需要数组。

这是 good'ol'code ,它被用来通过其HWND跟踪多个实例:

Option Compare Database
Public colForms As New Collection
Public mintI As Integer
Public Sub NewFormInstance(frmOld As Form_MyForm)
    Dim frm As Form_MyForm
 
    Set frm = New Form_MyForm
 
    mintI = mintI + 1
    colForms.Add Item:=frm, Key:=frm.Hwnd & ""
    frm.Caption = "My Form " & mintI
    DoCmd.MoveSize (mintI + 1) * 80, (mintI + 1) * 350  
    frm.Visible = True
End Sub 

您可以轻松地适应您的方案。

最新更新