Dirty 事件

expandtri全部显示

窗体的内容或组合框的文本部分的内容更改时,Dirty 事件发生。在选项卡控件中从一页移到另一页时,该事件也会发生。

Private Sub Form_Dirty(Cancel As Integer)

Dirty 事件过程具有以下参数:

参数

说明

Cancel

该设置决定是否发生 Dirty 事件。将 Cancel 参数设为 True 就取消 Dirty 事件。也可以使用 DoCmd 对象的 CancelEvent 方法来取消该事件。

说明

该事件的示例包括直接在文本框或组合框中输入一个字符,或者使用或 Visual Basic 更改该控件的 Text 属性设置。

?使用宏或 Visual Basic 修改一个窗体内的记录不会触发该事件。要想触发该事件,必须直接在记录中输入数据,或者设置控件的 Text 属性。
?该事件仅适用于绑定窗体,对未绑定窗体或报表无效。

若要在该事件发生时运行宏或事件过程,可将 OnDirty 属性设为宏的名称或 [事件过程]。

通过在 Dirty 事件发生时运行宏或事件过程,可以确定记录是否能被更改。也可以显示一条消息请求获得编辑权限。

使用键盘更改记录中的数据,除了会发生类似 Dirty 事件的控件事件外,还会引发键盘事件。例如,如果移到新记录并在记录的文本框中输入一个 ANSI 字符,就会依次发生以下事件:

KeyDown > KeyPress > BeforeInsert > Dirty > KeyUp

在记录中输入完新的或更改的数据、并移到其他记录(或单击了“记录”菜单中的“保存记录”)之后,才发生记录的 BeforeUpdateAfterUpdate 事件,因此它们是发生在记录的 Dirty 事件之后的。

取消 Dirty 事件将会导致回滚对当前记录的更改。相当于按 Esc 键。

示例

下面的示例将在更改数据时启用 btnUndo 按钮。从文本框控件的 Dirty 事件中调用 UndoEdits( ) 子例程。通过使用 OldValue 属性,单击启用的 btnUndo 按钮恢复控件的原始值。

Private Sub Form_Dirty()

    If Me.Dirty Then

        Me!btnUndo.Enabled = True     ' Enable button.

    Else

        Me!btnUndo.Enabled = False    ' Disable button.

    End If

End Sub

Sub btnUndo_Click()

    Dim ctlC As Control

        ' For each control.

        For Each ctlC in Me.Controls

            If ctlC.ControlType = acTextBox Then

                ' Restore Old Value.

                ctlC.Value = ctlC.OldValue

            End If

        Next ctlC

End Sub