说明:
我有两种不同的形式。
我的焦点是 frmABC ,我运行的程序将会#14; Tick" frmXYZ 上的一个名为 ChkConfirmed 的复选框。
问题:
这两种引用其他表单的方式之间的差异是什么?
1 即可。 Form_frmXYZ.ChkConfirmed = True
2 即可。表格!frmXYZ.ChkConfirmed = True
出于某种原因,只有#2 才能在此方案中使用。对我来说,这真是令人困惑,因为我一直使用#1 而且之前从未抱怨过(当我说抱怨时,我的意思是它完成了这项工作)。
但是,当我在这里使用#1 并逐步执行代码时,它肯定会运行代码,但不会检查任何框...只是没有。
所以,我很想知道技术上的差异,以帮助我了解何时使用每一个以及在什么情况下使用。
编辑: 实际代码段(根据要求提供)
#1版本
#2版本
答案 0 :(得分:4)
Access(我认为> = 97)将表单视为类,这意味着您的表单现在是一个类模块,可以包含所有[类行为],包括实例化
Form_your_formname
:您正通过Class模块引用Form。
Forms!your_form name
:您正在通过表单名称引用表单。
要通过Forms!form_name
访问表单,必须已加载表单。否则表单无法访问,您将收到错误消息 "the referenced ...... not found"
另一方面,Form_form_name
可以作为课程随时访问。它可以像所有类一样有多个实例。通过类模块访问未打开的表单将导致表单被实例化。这意味着Access将创建该表单的新隐藏实例。
要测试此尝试以下内容。
Form_frm_test.txt_id = 1
Form_frm_test.visible = true
?Form_frm_test.hwnd
docmd.openform "frm_test"
?Forms!frm_test.hwnd
现在你将看到frm_test表单的两个实例,每个实例都有自己的窗口句柄。
回答您的问题:
但是,当我在这里使用#1并逐步执行代码时,它肯定会运行代码,但不会检查任何框...只是没有。
因为您的表单正在实例化并且已隐藏。
所以,我很想知道技术差异,以帮助我了解何时使用每一个以及在什么情况下。
上面给出的技术说明。 如果您的表单已经加载,您可以使用Form!form_name / form_name来访问它。如果您正在实例化,请使用类名。
答案 1 :(得分:-2)
说实话,我从来没有见过你的第一个例子,实际上......实际上,Access 2010中的快速测试失败了,需要一个" Object Required"错误信息。我曾经做过的所有代码都使用了感叹号,如果我想要的话,有人会纠正我的感叹号,在你需要引用其他形式的所有情况下工作。