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)
我正在尝试显示一个错误表单,其中填充了来自自定义类型对象的文本,作为 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)