【发布时间】:2009-09-10 21:54:51
【问题描述】:
我有一个表格和一个按钮。我想通过从父表单传递到子表单的参数单击按钮打开另一个表单(子表单的 RecordSource 有参数)。我该怎么做?
【问题讨论】:
标签: ms-access
我有一个表格和一个按钮。我想通过从父表单传递到子表单的参数单击按钮打开另一个表单(子表单的 RecordSource 有参数)。我该怎么做?
【问题讨论】:
标签: ms-access
您可以通过引用表单的对象来引用调用表单的任何属性。我不会用!表单属性的符号(我讨厌它)。所以如果你想继承:
表单的控件值:
forms(parentFormName).controls(controlName).value
表单的记录集字段值:
forms(parentFormName).recordset.fields(fieldName).value
记录集周转在访问 id (guid) 值时特别有用。您无法通过表单的控件读取这些值,但可以通过记录集中的相应字段访问它们。如果您在包含 guid 字段的表单上有一个组合框,请比较以下内容:
screen.activeForm.controls(myComboControlName).value
和
screen.activeForm.recordset.fields(myComboControlName).value
【讨论】:
如果父窗体是打开的,你可以执行以下操作
Forms!MyParentForm!myPublicVariableOfParentForm
可能还有其他方法,您可以使用父表单中的参数调用子表单上的方法。请记住,控件在被操作之前可能需要获得焦点。
【讨论】:
您可以使用“OpenArgs”。调用表单时,只需传递您的 OpenArgs 字符串,然后在子表单上读取并解析。您可以准备自定义解决方案来构建解析更复杂的“OpenArgs”字符串。 参考: http://msdn.microsoft.com/en-us/library/bb215912.aspx
【讨论】:
参考上面大卫的评论:
.Value 是不必要的,因为它是默认属性。您可以指定它的唯一情况是您传递控制值 到传递参数 ByRef 而不是的子例程/函数 拜瓦尔。使用 .Value 强制 ByVal 即使参数定义为 参考文献。但是,当然,如果子/功能假设它正在获得 控制参考,可以打破它...
ByRef/ByVal::这对我有用。我有一个包含两个日历对象的表单,并希望从另一个模块子引用每个对象的值。我使用 ByRef 还是 ByVal 似乎并不重要。下面的例子我使用了 ByRef。
public sub nameofsub(byref calendarfromdate as string, byref calendartodate as string)
docmd.runsql("select fieldname from table where fieldname between #" & calendarfromdate & "# and #" & calendartodate & "#")
end sub
从打开的表单中,我有一个按钮,当点击并执行我需要的代码时,它会调用这个子。
private sub btn_callqry_click()
call nameofsub(calendarfromdate,calendartodate)
end sub
无需在打开的表单类的开头公开calendarfromdate和calendartodate的值,例如:
public calendarfromdate as string
注意:如果使用上面的例子,字符串必须格式化为 mm/dd/yyyy
注意:如果您的表单包含在 Windows XP 中使用 Access 时发现的日历控件对象,则该日历对象在 Windows 7 上不存在,最好的选择是取出日历对象并放入两个标有标签的文本框中作为 FromDate 和 ToDate 并将它们的属性更改为将文本格式化为“日期”。这样做会在输入时自动在框旁边显示一个日期选择器。
【讨论】: