Filter 事件

expandtri全部显示

Microsoft Access 项目(.adp)或 Access 数据库(.mdb)中可以发生 Filter 事件。

Private Sub Form_Filter(Cancel As Integer, FilterType As Integer)

Cancel    该设置确定是否打开筛选窗口。将 Cancel 参数设置为 True (–1) 可阻止打开筛选窗口。还可以使用 DoCmd 对象的 CancelEvent 方法取消打开筛选窗口。

FilterType    用户尝试打开的筛选器窗口。FilterType 参数可以是以下固有常量之一:

常量值

acFilterByForm 0

acFilterAdvanced 1

acServerFilterByForm 2

当用户在 Access 数据库中执行下列操作时,Filter 事件发生:

?“窗体”视图中的“记录”菜单上,指向“筛选”,然后单击“按窗体筛选”,或在工具栏上单击“按窗体筛选” filtform 。这样将打开“按窗体筛选”窗口,在此窗口中可以创建一个基于窗体中字段的筛选
?在“窗体”视图中的“记录”菜单上,指向“筛选”,然后单击“高级筛选/排序”。这样将打开“高级筛选/排序”窗口,在此窗口中可为窗体创建复杂的筛选。
?在“按窗体筛选”窗口打开时,在“筛选”菜单上单击“高级筛选/排序”;或在“高级筛选/排序”窗口打开时,在“筛选”菜单上单击“按窗体筛选”。这些操作会在打开的筛选窗口关闭时,导致 ApplyFilter 事件发生,然后,在其他“筛选”窗口打开时,Filter 事件发生。

当用户在 Access 项目中执行下列操作时,Filter 事件发生:

?在“窗体”视图中的“记录”菜单上,指向“筛选”,然后单击“按窗体筛选”,或在工具栏上单击“按窗体筛选” filtform 。这样将打开“按窗体筛选”窗口,在此窗口中可以创建一个基于窗体中字段的筛选。
?在“窗体”视图中的“记录”菜单上,指向“筛选”,然后单击工具栏上的“按窗体服务器筛选” servfilt 。 这样将打开“按窗体服务器筛选”窗口,在此窗口中可以快速创建基于窗体中字段的服务器筛选。
?在 Access 项目中“高级筛选/排序”窗口不可用。

说明

若要在此事件发生时运行事件过程,请将 OnFilter 属性设置为宏的名称或 [事件过程]。

使用 Filter 事件可以执行以下操作:

?删除窗体上以前的所有筛选。为此,首先在筛选操作或事件过程中将窗体的 FilterServerFilter 属性设为一个空字符串 (" ")。如果要确保在新的筛选中不显示无关的条件,此方法非常有用。例如,当使用“按选定内容筛选”功能,使用的条件(在窗体中选取的文本)都将添加到 FilterServerFilter 属性的 WHERE 子句表达式中,而且会在“按窗体筛选”窗口和“高级筛选/排序”或“按窗体服务器筛选”窗口中显示。通过使用 Filter 事件可删除旧条件。

?为新筛选输入默认设置,可设置 FilterServerFilter 属性来包含这些条件。例如,可以使“产品”窗体的全部筛选仅显示当前产品(在“产品”窗体中的“中止”控件没有选定的产品)。
?使用自定义的筛选窗口而不是 Microsoft Access 的“筛选”窗口。当 Filter 事件发生时,可打开自己的自定义窗体,然后使用此窗体中的项目来设置 Filter 或 ServerFilter 属性以及对以前的窗体进行筛选。当用户关闭此自定义窗体时,将原来窗体的 FilterOnServerFilterByForm 属性设为 True (-1) 即可应用筛选。取消 Filter 事件可阻止打开 Microsoft Access“筛选”窗口。

?避免窗体中的特定控件在“按窗体筛选”或“按窗体服务器筛选”窗口中显示或使用。如果在 Filter 宏或事件过程中禁用或隐藏某个控件,则此控件将在“按窗体筛选”或“按窗体服务器筛选”窗口中隐藏或失效,不能用于设置筛选条件。然后,在应用筛选之后,或者从窗体中删除筛选后,便可以使用 ApplyFilter 事件来显示或启用该控件。

通过使用 SetValue 操作,可以在 Filter 宏中设置 Filter 或 ServerFilter 属性。这样,您便可以自定义当显示“按窗体筛选”窗口、“高级筛选/排序”窗口或“按窗体服务器筛选”窗口时用户所看到的筛选条件。

可以在 Filter 宏中使用 CancelEvent 操作来取消打开筛选器窗口的操作。

示例

下面的示例显示了如何在用户尝试创建筛选器时禁用“Orders”窗体上的“TotalDue”控件,以便该用户无法对此字段进行筛选。任何具有“TotalDue”值并且满足其他筛选条件的记录都会始终显示在筛选后的窗体上。此示例还强制用户使用“按窗体筛选”窗口而不是“高级筛选/排序”窗口。

若要试用该示例,请在包含“TotalDue”控件的“Orders”窗体中添加下面的事件过程。请通过使用“高级筛选/排序”窗口(该窗口使用“TotalDue”控件)尝试创建筛选器。还要通过使用“按窗体筛选”窗口来尝试创建相同的筛选器。

Private Sub Form_Filter(Cancel As Integer, FilterType As Integer)

    If FilterType = acFilterByForm Then

        Forms!Orders!TotalDue.Enabled = False

    ElseIf FilterType = acFilterAdvanced Then

        MsgBox "The best way to filter this form is to use the " _

            & "Filter By Form command or toolbar button.", vbOKOnly + vbInformation

        Cancel = True

    End If

End Sub