Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何直接在集合中实例化窗体_Vba_Ms Access - Fatal编程技术网

Vba 如何直接在集合中实例化窗体

Vba 如何直接在集合中实例化窗体,vba,ms-access,Vba,Ms Access,我以几种方式使用“订单行”表单(按订单号、按产品代码、按客户、按供应商等)。 它的每个实例都可以启动一个新实例 例如: 此表单的第一个实例列出了特定订单的所有订单行 通过双击此实例中的产品ID,用户启动此表单的第二个实例,其中列出了与此特定产品相关的所有订单行 通过双击第二个实例中的客户代码,用户启动第三个实例,该实例列出了与此特定客户相关的所有订单行 等等 为了实例化表单“OrderLines”,我使用以下代码: 在“声明”模块中: 以电话形式: x = boring_functi

我以几种方式使用“订单行”表单(按订单号、按产品代码、按客户、按供应商等)。 它的每个实例都可以启动一个新实例

例如:

  • 此表单的第一个实例列出了特定订单的所有订单行
  • 通过双击此实例中的产品ID,用户启动此表单的第二个实例,其中列出了与此特定产品相关的所有订单行
  • 通过双击第二个实例中的客户代码,用户启动第三个实例,该实例列出了与此特定客户相关的所有订单行
  • 等等
为了实例化表单“OrderLines”,我使用以下代码:

在“声明”模块中:

以电话形式:

    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)
我的问题是:有没有办法在集合中“直接”实例化表单,而不是使用枯燥的函数来在fForms()和fForms(x)中查找一个空闲的房间来实例化表单

我试过:

    cForms.add Item:=(New Form_OrderLines)
这是可行的,但:

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


2) 我不知道如何编写“Key:=CStr(cForms(x).Hwnd)”的等价物。

当您拥有集合时,您不需要数组

这是良好的“ol”代码,用于通过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 

您可以轻松地根据您的场景进行调整。

拥有集合时,您不需要阵列

这是良好的“ol”代码,用于通过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 

您可以轻松地将其适应您的场景。

为什么需要cForms,您使用它来实现阵列无法实现的功能是什么?另外,要在数组中实例化它的集合fForms(无聊的函数\u到\u找到\u一个\u空闲的房间\u在\u fForms()中)=新表单\u订单行为什么需要cForms,你用它来做数组无法完成的事?另外,要在数组中实例化它的集合fForms(在fForms()中找到一个空闲的房间)=新表单OrderLinesThanks,它可以正常工作。即使我不了解它是如何工作的:表单实例如何在NewFormInstance()执行结束时生存到“frm”变量死亡?frm不会“死亡”,而是存储在集合中,以便稍后通过其键进行识别。谢谢,它工作得很好。即使我不理解它是如何工作的:表单实例如何在NewFormInstance()执行结束时生存到“frm”变量的死亡?
frm
不会“死亡”,而是存储在集合中,以便稍后通过其键进行识别。