如何在 OnDirty 事件(MS Access 2007)中判断表单是否脏?
考虑这个简单的例子,我正在调用一个子程序来验证 Form_Dirty()事件中的一些按钮。
Private Sub Form_Dirty(Cancel As Integer)
MsgBox Me.Dirty
' The above line shows false, which makes the Me.Dirty property about as useful as tits on a bull!
Call validateSaveCancelBtn
End Sub
Private Sub validateSaveCancelBtn()
btnCancel.ENABLED = Me.Dirty
btnSave.ENABLED = Me.Dirty
End Sub
请不要告诉我只需将 validateSaveCancelBtn()中的代码粘贴到 Form_Dirty()中并在其中进行硬编码。这对我来说不是很有用,因为我也从其他地方调用validateSaveCancelBtn(),实际的逻辑比我在这里粘贴的更复杂。
答案 0 :(得分:3)
假设您的表单是绑定表单,表单绝对保证在Form的Dirty Event上变脏,尽管此时Me.Dirty属性仍然是false。
以下是你如何解决这个奇怪的问题。
Private Sub Form_Dirty(Cancel As Integer)
Call validateSaveCancelBtn(True)
End Sub
Public Sub validateSaveCancelBtn(bDirty as Boolean)
btnCancel.Enabled = bDirty
btnSave.Enabled = bDirty
End Sub
您调用validateSaveCancelBtn的其他任何地方,只需使用:
Private Sub Form_AfterUpdate()
Call validateSaveCancelBtn(Me.Dirty)
End Sub
纯粹作为旁注
我尝试不使用“保存/新建”/“取消/删除”按钮上的“可见”和“已启用”属性。我发现对每个按钮后面的代码进行编程更加万无一失,这样它就可以针对每种可能的情况以不同方式(并且正确地)按下按钮。
如果这些按钮始终可见并启用,则对用户的反馈较少,即使没有要保存或取消的内容,也可以显示保存或取消。话虽如此,请考虑Access中的“保存”和“取消”按钮基本上是开箱即用的。原因如下:
我通常会显示一个“保存”按钮,并使其始终可见并启用。它使用户感觉很好点击它,并且提供按钮没有任何害处。我实际上也把代码放在后面,但是我没有强迫用户使用保存按钮,因为还有其他事件(如上所述)会导致Save被触发。
我通常不提供“取消”按钮,因为只要添加子窗体它们就会“断开”。我参与了很多关于如何为用户提供取消按钮的讨论,该按钮可以取消多记录编辑(基本上,处理表单和子表单作为事务)。可能最好的方法之一,虽然仍然非常涉及构建,但是使用临时表(基本上是伪临时表,因为Access实际上没有任何正式称为临时表的东西)来保存添加/编辑的记录。然后在“保存”按钮或“表单关闭”上,您必须将这些记录实际写回真实数据库。还有更多的东西,但我只是想给你一个粗略的想法。