那么如何将一个值从一种形式传递给另一种形式呢?例如:用户从列表中选择一个组织,这将打开旅行表格,允许用户输入有关旅行的各种信息。在一个地方,我想添加另一个小弹出表格,他们可以在其中输入他们正在访问的组织的联系信息(只是POC的名称和电话)。

因此,当从选择屏幕上打开该初始形式时,它具有两个简单隐藏在文本框中的ID(一个是Tripid,另一个是Orgid),因此,我如何将它们传递给第二个小弹出表单,以便联系信息具有与之相对的ID。

谢谢。

有帮助吗?

解决方案

在这些情况下,最好的方法不是试图通过一堆变量。它太多的代码,不灵活。例如,如果您需要传递两个值,那么多年来,当该需求增长到5个值时会发生什么?试图维护和传递全部价值观是太多的编码工作。

请记住,MS-access中的每种形式实际上都是可以在代码中操纵的类对象。因此,在此处使用对象方法,您发现您不仅编写更少的代码,而且您的代码将更加干净,更模块化,不需要全局var,并且您编写的代码通常可以在不同形式之间重复使用。

这是:

通常,当一种表单以开放式事件的形式以第二种形式启动另一种形式时(实际上,您甚至可以使用以后的加载事件),您可以选择对先前表单对象的引用。换句话说,您可以在此处使用对象方法。

在表单模块级别上,对于表单,我将表单对象声明为:

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

然后,在表单上装载事件中,我们去:

Set frmPrevious = Screen.ActiveForm

现在,我们形式中的任何代码都可以自由使用代码,事件,甚至是从代码中的以前的形式声明为公开的变量。

因此,如果您想强制磁盘写入以前的表单,并重载数据。

frmPrevious.Refresh

如果要设置ID值,请继续:

frmPrevious!ID = some value

并且,请注意,您甚至可以将表格声明为以前为该表格的公共变量,因此,如果您的两个表格深处,您可以走:

frmPrevious.frmPrevious!ID = some value

因此,只需在每种表单代码模块中声明一个对象(或在您需要在代码中使用值的对象)。以上意味着任何代码都有对先前表单对象的现成引用。以形式称为公共的功能将成为表格的一种方法,并且可以像以下方式一样运行:

frmPrevious.MyCustomRefresh

甚至像某些选项之类的东西迫使先前的表单生成和设置发票号码:

frmPrevous.SetInvoice

或者

frmPrevious.SetProjectStatusOn

因此,您不仅可以将值和数据汇总为来回,而且还可以轻松地执行您以备用形式的代码构建的功能和功能。

实际上,作为一个编码标准,我的大多数表格都具有称为的公共功能 MyRefresh.

请注意,这种方法的美在于您可以从以前的表单中读取 +使用 +设置值。这使您的代码不仅可以接收值,还可以以先前的形式设置值。因此,这种方法是双向的。您可以在表单之间来回混淆数据和值。这里的另一个优点是,您不仅限于变量,还可以使用字段,控制值(事件,属性)等。

这种方法意味着以前的大部分形式现在都触手可及。

因此,不要试图传递整个变量。传递对表格的引用,您的指尖有一个不错的准备好的对象,这使这种类型的编码问题变得轻而易举。

其他提示

通常的方法是从弹出式表单中引用初始形式的文本框,如以下方式:

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

但是,这将弹出式形式紧密地绑定到初始形式,因此不能在应用程序中的其他任何地方使用它。

一种更好的方法是使用OpenArgs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID

这将您的两个值放入一个字符串中,并将其传递给弹出式表单。然后,您可以使用拆分函数从OpenArgs中解析两个值。

有关使用OpenArgs传递参数的更多信息,请参见:http://www.fmsinc.com/free/newtips/access/accesstip13.asp

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top