我有一个带有清除数据按钮的弹出窗体。它运行撤消命令。
Form_Current事件将此按钮的enable属性设置为False。
Form_Dirty事件将此按钮的enable属性设置为True。
即使我在表单中输入数据,按钮的属性也始终设置为False。我想这是因为我的Form_Load事件填充了两个字段。一个作为OpenArgs从主窗体传递,另一个是基于OpenArgs值计算的唯一ID。
有关如何在这些情况下激活Dirty事件的任何建议吗?如果没有,那么可能是另一种方法吗?
提前致谢。
以下代码:
Private Sub cmdUndoChanges_Click()
CustID_temp = Me!CustID
FacNo_temp = Me!Unique_ID
DoCmd.RunCommand acCmdUndo
Me!CustID = CustID_temp
Me!Unique_ID = FacNo_temp
End Sub
Private Sub Form_Current()
Me!cmdUndoChanges.Enabled = False
End Sub
Private Sub Form_Dirty(Cancel As Integer)
Me!cmdUndoChanges.Enabled = True
End Sub
Private Sub Form_Load()
Dim test As Integer
Me!CustID = OpenArgs
test = DCount("Unique_ID", "tbl_Table2", "CustID = '" & Me!CustID & "'")
If IsNull(Me!UNIQUE_No) Then
test = test + 1
Me!Unique_ID = CustID & "-" & test
MsgBox "No Previous Data"
Else
' these will be turned back on when the user selects the
' modify data button or add new data button.
For Each ctl In Me.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acOptionGroup, acCheckBox
ctl.Locked = True
ctl.BackColor = 15066597
Box40.BackColor = 15066597
End Select
Next ctl
End If
MsgBox Me!Unique_ID
End Sub
答案 0 :(得分:0)
您是否尝试过Form_BeforeInsert()而不是Form_Dirty()?
答案 1 :(得分:0)
我发现另一个案例,Form_Dirty事件永远不会发生,这很难。我想我会在这里添加它,因为这是“不解雇”问题的最佳搜索结果。
如果您的Form_Load函数执行任何操作来更改现有记录的值,则表单将立即设置为脏,显然是在触发事件的逻辑开始运行之前。因此,如果表单上的其他数据发生更改,将永远不会发生事件。
我们有一个“智能”保存按钮,在Form_irty触发之前一直处于禁用状态。在我为具有垃圾字段的旧记录添加了一个针对Form_Load的修正后,编辑这些记录不再启用“保存”按钮。