1

当用户退出应用程序时,如何丢弃表单的内容?如果用户通过按钮关闭表单(例如返回主表单),可以使用Me.Undo. 但是,如果他关闭整个应用程序,则当前内容将输入到相应的表中,这与预期的不同。
我还尝试了关闭应用程序时都没有触发的on Closeand事件。on Unload

编辑:该on Close事件显示出奇怪的行为。AMsgBox正在执行,但Me.Undo不知何故不起作用。(当单击 X 退出应用程序时,可能在事件之前将表单内容输入到表中?)

4

1 回答 1

1

关闭表单会自动触发保存对绑定控件值的未决更改。您无法从表单卸载或关闭事件中拦截该保存操作。我能找到拦截它的唯一方法是从表单的更新和插入事件之前:

Dim SaveFlag As Boolean

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me.Dirty = True And SaveFlag = False Then
        Me.Undo
    End If
End Sub

在插入之前,您需要做类似的事情。而且您需要以SaveFlag某种方式进行管理,以便在您希望保存更改时实际保存更改。

Private Sub cmdSave_Click()
    SaveFlag = True
    Me.Dirty = False
    SaveFlag = False
End Sub

但是,如果您想要 Access 的默认行为,例如在记录之间导航或在主窗体和子窗体之间切换焦点时自动保存更改,则此方法不适合。

如果您非常需要此功能,则可以切换到未绑定的数据控件,并且仅在您明确命令它发生时才保存它们的值。但这会增加很多额外的工作,我不知道是否值得付出努力。我很想将此视为用户教育问题。"请注意,如果您在表单中关闭未保存更改的应用程序,则会为您保存更改。 "

于 2012-10-15T23:04:25.207 回答