那么如何将值从一种形式传递到另一种形式?例如:用户从列表中选择一个组织,这将打开一个旅行表单,允许用户输入有关旅行的各种信息。在一个地方,我想添加另一个小的弹出表单,他们可以在其中输入他们正在访问的组织的联系信息(只是 POC 的名称和电话)。
因此,当从选择屏幕打开初始表单时,它有两个隐藏在文本框中的 ID(一个是 tripID,另一个是 OrgID),那么我如何将这些传递给第二个小弹出表单,以便联系信息具有与之相关的 ID。
谢谢。
那么如何将值从一种形式传递到另一种形式?例如:用户从列表中选择一个组织,这将打开一个旅行表单,允许用户输入有关旅行的各种信息。在一个地方,我想添加另一个小的弹出表单,他们可以在其中输入他们正在访问的组织的联系信息(只是 POC 的名称和电话)。
因此,当从选择屏幕打开初始表单时,它有两个隐藏在文本框中的 ID(一个是 tripID,另一个是 OrgID),那么我如何将这些传递给第二个小弹出表单,以便联系信息具有与之相关的 ID。
谢谢。
在这些情况下,最好的方法是不要尝试传递一堆变量。代码太多,不灵活。例如,如果您需要传递两个值,那么多年来当该要求增加到 5 个值时会发生什么?试图维护和传递一个完整的值是太多的编码工作。
请记住,ms-access 中的每个表单实际上都是一个可以在代码中操作的类对象。因此,在这里使用对象方法,您会发现您不仅编写更少的代码,而且您的代码会更干净、更模块化,不需要全局变量,并且您编写的代码通常可以在不同的形式之间重用。
方法如下:
通常,当一个表单在表单打开事件中以第二个表单启动另一个表单时(实际上,您甚至可以在加载事件时使用),您可以获取对 PREVIOUS 表单对象的引用。换句话说,您可以在这里使用对象方法。
在表单模块级别,对于表单,我将表单对象声明为:
Option Compare Database
Option Explicit
dim frmPrevious as form
然后,在表单加载事件中,我们去:
Set frmPrevious = Screen.ActiveForm
现在,我们表单中的任何代码都可以自由地使用代码、事件,甚至是在代码中从之前的表单声明为公共的变量。
所以,如果你想强制以前形式的磁盘写入,并重新加载数据。
frmPrevious.Refresh
如果要设置 ID 值,请执行以下操作:
frmPrevious!ID = some value
并且,请注意,您甚至可以将 form previous 声明为该表单的 PUBLIC 变量,因此如果您有两个表单,您可以:
frmPrevious.frmPrevious!ID = some value
因此,只需在每个表单代码模块(或至少在您需要在代码中使用值的那些)中声明一个表单对象。以上意味着任何代码都有对前一个表单对象的现成引用。在表单中声明为 public 的函数将成为表单的 METHOD,并且可以像这样运行:
frmPrevious.MyCustomRefresh
甚至诸如强制以前的表单生成和设置发票编号的选项之类的东西:
frmPrevous.SetInvoice
或者
frmPrevious.SetProjectStatusOn
因此,您不仅可以来回打乱值和数据,还可以轻松地执行在代码中为前一个表单构建的特性和函数。
事实上,作为一种编码标准,我的大多数表单都有一个名为MyRefresh
.
请注意,这种方法的美妙之处在于您可以从以前的表单中读取 + 使用 + 设置值。这使您的代码不仅可以接收值,还可以在以前的形式中设置值。所以这种方法是双向的。您可以在表单之间来回移动数据和值。这里的另一个优点是您不仅可以使用变量,还可以使用字段、控制值(事件、属性)等。
这种方法意味着以前的大部分表格现在都触手可及。
所以不要试图传递一大堆变量。传递对表单的引用,您就可以轻松获得一个漂亮的现成对象,它使这种类型的编码问题变得轻而易举。
通常的方法是从弹出表单中引用初始表单中的文本框,如下所示:
Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID
但是,这将弹出表单紧密绑定到初始表单,因此它不能在应用程序的其他任何地方使用。
更好的方法是使用 OpenArgs:
DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID
这会将您的两个值放入一个字符串中,该字符串将传递给弹出表单。然后,您可以使用 Split 函数从 OpenArgs 中解析出这两个值。
有关使用 OpenArgs 传递参数的更多信息,请参阅: http ://www.fmsinc.com/free/NewTips/Access/accesstip13.asp