use*_*932 3 forms ms-access vba access-vba
我有一个名为'detail'的表单,它显示了所选记录的详细视图.该记录从称为"搜索"的不同形式中选择.因为我希望能够打开多个'detail'实例,每个实例都显示不同记录的详细信息,所以我使用了以下代码:
Public detailCollection As New Collection
Function openDetail(patID As Integer, pName As String)
'Purpose: Open an independent instance of form
Dim frm As Form
Debug.Print "ID: " & patID
'Open a new instance, show it, and set a caption.
Set frm = New Form_detail
frm.Visible = True
frm.Caption = pName
detailCollection.Add Item:=frm, Key:=CStr(frm.Hwnd)
Set frm = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
PatID是我希望在这个新的'detail'实例中显示的记录的主键.调试打印行打印出正确的PatID,所以我可以使用它.如何将其传递给表单的新实例?
我试图设置新表单的OpenArgs,但是我收到一条错误,指出OpenArgs是只读的.经过研究,OpenArgs只能由DoCmd设置(这将不起作用,因为那时我没有得到表单的独立实例).创建Form对象时,我找不到有关允许参数的文档.显然,微软并不认为构造函数是一种方法,至少根据文档.我该怎么处理?(请不要告诉我把它设置成一个看不见的文本框或者其他东西)谢谢你们,你们是网上最好的回答这些问题的人.我爱你们!
多实例表单的源代码取自:http://allenbrowne.com/ser-35.html
在Form_detail中,创建一个自定义属性.
Private mItemId As Long
Property Let ItemID(value as Long)
mItemId = value
' some code to re query Me
End Property
Property Get ItemId() As Long
ItemId = mItemId
End Property
Run Code Online (Sandbox Code Playgroud)
然后,在创建表单的代码中,您可以执行此操作.
Set frm = New Form_detail
frm.ItemId = patId
frm.Visible = True
frm.Caption = pName
Run Code Online (Sandbox Code Playgroud)
这将允许您将ID传递给新的表单实例,并确保在将其显示之前将其重新获取.如果您总是New通过它打开表单,则无需每次都加载所有结果.您让属性加载数据而不是传统Form_Load事件.
这是有效的,因为Access Form模块只不过是荣耀的类.希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |