当窗体的内容或组合框的文本部分的内容更改时,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
在记录中输入完新的或更改的数据、并移到其他记录(或单击了“记录”菜单中的“保存记录”)之后,才发生记录的 BeforeUpdate 和 AfterUpdate 事件,因此它们是发生在记录的 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