【发布时间】:2019-10-02 04:42:13
【问题描述】:
我在 Access 中有一个组合框,它有一个绑定到表的行源,但不与表单共享相同的记录源。我希望用户能够从下拉框中选择项目,但我想在他们更改内容之前给他们一个警告,如果他们说不,然后撤消这样的更改:
Private Sub cboSelectAddress_BeforeUpdate(Cancel As Integer)
Dim rs As New ADODB.Recordset
Dim prevAddress As String
'prevAddress = Me.cboSelectAddress.Value
If MsgBox("Are You sure you want to change the value of the combo box?", vbQuestion + vbYesNo + vbDefaultButton2, "CTNO change altert") = vbYes Then
'DO SOMETHING
Else
'Me.cboSelectAddress.Value = prevAddress
Cancel = True
End If
End Sub
只要我更改组合框的值,组合框的值就会发生变化,然后才会触发 before_update 事件。
为了缓解这种情况,我尝试在更改之前存储地址框的值,并在用户选择 NO 时将其设置回原始值,但这也会产生错误,因为它会尝试通过之前的更新事件本身。如您所见,我已将那部分代码注释掉。
【问题讨论】:
-
您是否进行了步进调试?您将看到 prevAddress 正在接收输入的新值,而不是旧值。因此,即使您没有收到错误,也不会将组合框设置为先前的输入。
-
是的,你是对的,刚刚意识到这一点
-
为什么需要对 UNBOUND 控件的用户输入进行微观管理?
-
我刚刚了解到,即使在绑定控件中,组合框值更改后也会触发更新前事件。为了缓解这种情况,我添加了:
Me.cboSelectAddress.Undo如果用户选择否。 -
你可以写下你自己问题的答案。