我需要创建一个搜索表单的多个副本(在 Access 2010 中),它会向调用返回一个值(也就是创建表单实例的表单)。 / p>
如上所述,这些表单可以并且将同时运行多个副本,例如用户可能希望将公司添加到某些内容中,以便他们:
这一切都允许用户在发现错误时更新和更正数据,从而减少他们忘记错误的可能性并使其更快!
现在大部分情况都很好,但是我遇到了很多问题,表单的实例无法作为“acDialog”打开,因此在搜索完成之前停止调用代码运行(请参阅this question更多信息)和我已经解决的解决方案是通过使用无限循环模拟调用代码的暂停,并检查搜索屏幕瞬间是否仍然可见。然后,当用户在搜索屏幕上立即选择某些内容时,它将该值放入搜索屏幕中的隐藏字段中并隐藏它的自身(未关闭)。然后调用函数看到它隐藏了从隐藏字段中获取值并卸载瞬间。
我可以使用FormInstant.Visable隐藏表单是否隐藏但是如果用户关闭表单会导致错误,而我通常用来检查表单是否存在的代码需要表单名称因为它是表格的瞬间,所有表格都有相同的名字!我确实有一个对表单的引用,因为它存储在本地“表单”对象中......我通常使用的代码是:
CurrentProject.AllForms("FormName").IsLoaded
那么如何检查表格的即时加载?
答案 0 :(得分:0)
LOL我刚刚在重新阅读我的消息时意识到,如果表单是打开的话我可能会错误地解决错误!
我已经快速写了这个,似乎工作正常:
Public Function IsFormLoaded(ByRef FormToTest As Form, _
Optional ByRef bIsVisable As Boolean = False) As Boolean
Dim lErrorNum As Long
bIsVisable = False
On Error Resume Next
bIsVisable = NewFormClone.Visible
lErrorNum = Err.Number
On Error GoTo 0
If (lErrorNum = 0) Then
IsFormLoaded = True
Else
IsFormLoaded = False
End If
End Function
猜猜只要问题得到解答并且下一个人/ gal可以使用它就不会真正回答问题!:)
我会稍微公开一下如果没有人找到更好的答案,我会将其标记为......
答案 1 :(得分:0)
我喜欢你的回答。至于循环/等待的想法?更好的方法是始终在每个表单中包含引用。我实际上声明了名为frmPrevious的表单模块变量。
Create instance of form
Instance.frmPrevious = me
所以现在我们在窗体关闭时使用“调用”代码来代替一些“可见”+循环代码设置。
所以在我们的表格的密切代码中:
frmPrevious.FunctionCodeToRun
上面解决了很多问题,但是一个是你不需要对话框(你注意到它不能使用)而且你还需要从调用代码中编写“循环+等待”代码。
但这意味着您的代码会在调用表单中的新函数中继续。因此,我通常将该函数放在调用表单中的调用代码下面。我也倾向于使用该功能的标准名称。我觉得这个交易是值得的,而不是循环/等待并继续在相同的代码例程中(我同意这在代码中的“继续”通常是可取的,但是然后再次编写循环和等待代码并不是真的那么干净)
答案 2 :(得分:0)
一个老问题,但这里有经验告诉我:如果一个,两个...... FormDefn实例打开然后用户关闭一个(Master是唯一可以设计的),Forms(FormName)给出错误,表格(表格)给出错误的对象, 但Forms(NumberIndex)仍然存在.Name = FormName!
OpenForm创建Forms(FormName)对象。关闭后,Forms(FormName)会出错。任何“Set xForm = New Form_xxx”都会在表单集合中创建只能通过集合号索引访问的表单,并且不能设计。
因此,稍后找到一个多实例表单使用类似:
Dim FormIdx As Integer
Dim lForm As Access.Form
For FormIdx = 0 To Application.Forms.Count - 1
Set lForm = AccessFunc.Appl.Forms(FormIdx)
If lForm.Name = pFormName Then
IsFormOpened = True
Set rForm = lForm
GoTo IsFormOpened_Exit
End If
Next
答案 3 :(得分:0)
试试这个
Function IsLoaded(strFrmName As String) As Boolean
' Determines if a form is loaded.
Const conFormDesign = 0
Dim intX As Integer
IsLoaded = False
For intX = 0 To Forms.Count - 1
If Forms(intX).FormName = strFrmName Then
If Forms(intX).CurrentView <> conFormDesign Then
IsLoaded = True
Exit Function ' Quit function once form has been found.
End If
End If
Next
End Function
您可以在项目中调用上述功能,如此
If Not isLoaded("MyForm") Then
MsgBox "MyForm is Not Loaded"
End If