如何直接在集合中

时间:2017-03-11 11:19:14

标签: vba ms-access

我以多种方式使用“OrderLines”表单(按订单号,按产品代码,按客户,按供应商,......)。 它的每个实例都能够启动它的新实例。

示例:

  • 此表单的第一个实例列出了特定订单的所有订单行
  • 通过在此实例中双击产品ID,用户启动此表单的第二个实例,其中列出了有关此特定产品的所有订单行
  • 通过双击第二个实例中的客户代码,用户启动第三个实例,列出有关此特定客户的所有订单行
  • 等......

要实例化“OrderLines”形式,我使用这种代码:

在“声明”模块中:

    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_fForms()和fForms(x)来实例化表单,有没有办法在集合中“直接”实例化它?

我试过了:

    cForms.add Item:=(New Form_OrderLines)

它的工作原理但是:

1)每个新实例关闭前一个实例

2)我不知道怎么写相当于“Key:= CStr(cForms(x).Hwnd)”

1 个答案:

答案 0 :(得分:0)

收藏时你不需要阵列。

这是好的'代码,用于通过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 

您可以轻松地根据您的情况进行调整。