ApplyFilter 事件在 Microsoft Access 项目 (.adp) 或 Access 数据库 (.mdb) 中都可以发生。
在 Access 数据库中,用户执行下列操作之一时,ApplyFilter 事件将发生:
? | 在“窗体”视图中单击“记录”菜单上的“应用筛选/排序”;在“筛选”窗口中单击“筛选”菜单上的“应用筛选/排序”;或单击工具栏上的“应用筛选”。这会应用最近创建的筛选(使用“按窗体筛选”功能或“高级筛选/排序”窗口创建)。 |
? | 在“窗体”视图的“记录”菜单上,指向“筛选”,然后单击“按选定内容筛选”,或单击工具栏上的“按选定内容筛选”。这会基于窗体中当前选定的内容应用筛选。 |
? | 在“窗体”视图中的“记录”菜单上,指向“筛选”,然后单击“内容排除筛选”。这样可在窗体的当前选定内容以外应用筛选。 |
? | 在“窗体”视图中单击“记录”菜单上的“取消筛选/排序”,或单击工具栏上的“取消筛选”,即可取消当前应用于窗体的所有筛选(或排序)。 |
注释 用户取消筛选时,子窗体上不会发生 ApplyFilter 事件。在这种情况下,ApplyFilter 事件会在父窗体上发生。
? | 关闭“高级筛选/排序”窗口或“按窗体筛选”窗口。 |
? | 当“按窗体筛选”窗口打开时,单击“筛选”菜单上的“高级筛选/排序”,或者当“高级筛选/排序”窗口打开时,单击“筛选”菜单上的“按窗体筛选”。这样在筛选窗口关闭时将发生 ApplyFilter 事件,然后当其他“筛选”窗口打开时,Filter 事件发生。 |
在 Access 项目中,用户执行下列操作之一时,ApplyFilter 事件发生:
? | 在“窗体”视图中单击“记录”菜单上的“应用筛选/排序”、在“筛选”窗口中单击“筛选”菜单上的“应用筛选/排序”,或者在工具栏上单击“应用筛选”,都会应用最近创建的筛选(使用“按窗体筛选”功能创建)。 |
? | 在“窗体”视图中单击“记录”菜单上的“应用服务器筛选”、在“筛选”窗口中单击“筛选”菜单上的“应用服务器筛选”,或者在工具栏上单击“应用服务器筛选”,都会应用最近创建的筛选(使用“按窗体服务器筛选”功能创建)。 |
? | 在“窗体”视图的“记录”菜单上,指向“筛选”并单击“按选定内容筛选”,或单击工具栏上的“按选定内容筛选”,即可基于窗体中当前选定的内容应用筛选。 |
? | 在“窗体”视图的“记录”菜单上,指向“筛选”并单击“内容排除筛选”。这样即可在窗体的当前选定内容以外应用筛选。 |
? | 当窗体上的一个绑定控件获得焦点时,单击快捷菜单上的“按选定内容筛选”或“内容排除筛选”,或在“筛选目标”框中输入表达式。 |
当该事件发生时,若要运行一个宏或事件过程,可将 OnApplyFilter 属性设置为宏的名称或 [事件过程]。
? | 确保正在应用的筛选是正确的。例如,可能希望确定应用于“订单”窗体的任意筛选包括了限制“订购日期”字段的条件。为此,请检查窗体的 Filter 或 ServerFilter 属性值,以确保该条件包含在 WHERE 子句表达式中。 |
? | 在应用筛选之前更改窗体的显示。例如,应用某个筛选时,可能会因为某些字段不适合于该筛选所显示的记录,而要求禁用或隐藏某些字段。 |
? | 撤消或改变 Filter 事件发生时所进行的操作。例如,因为并不希望将某些控件包括在筛选条件之内,所以可以在用户创建筛选时隐藏或禁用窗体上的这些控件,然后在应用筛选后再启用或显示它们。 |
在应用筛选或取消筛选前,或者在关闭“高级筛选/排序”、“按窗体筛选”、“按窗体服务器筛选”窗口之后、重新显示窗体之前,ApplyFilter 宏中的操作或事件过程将发生。在新建筛选中输入的条件,将成为 ApplyFilter 宏或事件过程的 Filter 或 ServerFilter 属性设置。
注释 当用户执行下列操作之一时,ApplyFilter 事件不会发生:
? | 通过在宏内使用 ApplyFilter、OpenForm 或 ShowAllRecords 操作,或使用这些操作在 Visual Basic 中 DoCmd 对象的对应方法,即可应用或者取消筛选。 |
? | 在宏或 Visual Basic 中对 Filter 或 ServerFilter 属性或 FilterOn 或 ServerFilterByForm 属性进行设置(尽管完全可以在 ApplyFilter 宏或事件过程中对这些属性进行设置)。 |
以下示例显示了当筛选用于限制那些已支付的订单记录时,如何在“订单”窗体上隐藏“数量”、“折扣”和“总价”控件。
若要试用该示例,请在包含“数量”、“折扣”和“总价”控件的“订单”窗体中添加下列事件过程。运行只列出那些已支付了的订单记录的筛选。
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If Not IsNull(Me.Filter) And (InStr(Me.Filter, "Orders.Paid = -1")>0 _
Or InStr(Me.Filter, "Orders.Paid = True")>0)Then
If ApplyType = acApplyFilter Then
Forms!Orders!AmountDue.Visible = False
Forms!Orders!Tax.Visible = False
Forms!Orders!TotalDue.Visible = False
ElseIf ApplyType = acShowAllRecords Then
Forms!Orders!AmountDue.Visible = True
Forms!Orders!Tax.Visible = True
Forms!Orders!TotalDue.Visible = True
End If
End If
End Sub