全部显示

Dirty 事件

       

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

Private Sub Form_Dirty(Cancel As Integer)

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

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

说明

该事件的示例包括直接在文本框或组合框中输入一个字符,或者使用或 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