MS-Access:从自定义类型填充模态表单

MS-Access: Populate modal form from custom type

我正在尝试显示一个错误表单,其中填充了来自自定义类型对象的文本,作为 this Excel question 上精彩答案的 MS-Access 版本。

我 运行 遇到的问题是我想在这个错误表单上等待用户 response/confirmation,所以它必须是(据我所知)模态表单,因此我不能只打开表格并立即填充它。

我试图找到一种在 Access 中执行在 Excel 中完成的操作的方法;加载表单,填充表单然后显示表单,但这似乎不可能,因为 Access 的事件顺序是打开->加载->...

我也试过寻找一种方法来打开普通表单,填充然后 'modalise' 表单,但找不到执行此操作的方法。

有谁知道实现这个功能的方法吗?或者是否有模式形式的替代方法来暂停执行以等待用户输入?

模态表单与对话框表单有很大不同。

模式窗体不会导致调用代码停止,但对话框窗体会。 (不要混淆这两种形式)。

要从对话框表单“取回”用户响应,只需设置表单 visible = false 代替关闭表单命令。这会将对话窗体踢出对话模式,并且您的调用代码现在继续并且调用代码是“免费的”来检查用户输入的任何值或说从组合框、复选框或其他任何内容中选择。

因此您的代码块将如下所示:

Private Sub Command0_Click()

   Dim f       As String
   Dim strT    As String

   f = "formB"
   DoCmd.OpenForm f, , , , , acDialog

   If CurrentProject.AllForms(f).IsLoaded Then
      ' grab any values entered by user, or whatever buttons hit
      strT = Forms(f).Text1
      ' etc. etc. etc. - grab values from that form
      ' don't forget to close the form
      DoCmd.Close acForm, f
   Else
      ' user canceled the form
      ' code goes here for user hitting your cancel button or "x"
   End If

End Sub

在您的对话框表单中,“确定”按钮或“关闭”按钮只是:

Me.visible = 假

如果用户点击您的取消按钮,该代码将是:

Docmd.Close 表格

因此,如果用户点击“取消”甚至点击右上角的“X”,您会考虑并假设用户“退出”。当他们这样做时,表格将被关闭。

因此,对话框部分之后的代码只是检查表单是否仍然打开(因为您的“确定”按钮显示为 visible = false)。

并且由于表单仍处于打开状态,因此您可以自由获取任何控件的值 – 例如在文本框中键入的用户文本、来自组合框、复选框或其他任何内容的值。

用户完成后,调用代码可以自由检查或从该表单中获取任何值。

编辑 - 允许 "setting" 个值的第二个解决方案。

此代码有效:

Private Sub Command0_Click()

   Dim f       As String
   Dim strT    As String

   f = "formB"

   DoCmd.OpenForm f
   Forms(f).Text1 = "Hello"    ' set values on form

   ' now WAIT for user   
   Do While CurrentProject.AllForms(f).IsLoaded
      If Forms(f).ok = True Then Exit Do
      DoEvents
   Loop

   If CurrentProject.AllForms(f).IsLoaded Then
       If Forms(f).ok = True Then
          MsgBox "value return = " & Forms(f).Text1
       Else
          MsgBox "user cancel"
       End If
       DoCmd.Close acForm, f
   Else
      ' cancel code goes here
      MsgBox "user cancel"
   End If

End Sub

表单 B 上的确定按钮的代码现在是:

Me.Visible = False
Me.ok = True

并且您需要一个 public var "ok" 表格 B。 例如:

Option Compare Database
Option Explicit

Public ok      As Boolean

所以表单B中的取消按钮可以简单的关闭表单。 (您可以关闭表单 - 但不要设置 ok = True)