访问列表框更新后不更新时选择= True

问题描述:

我有Access窗体与列表框和组合框。访问列表框更新后不更新时选择= True

Private Sub Form_Open(Cancel As Integer) 
    '... misc code 
    me.comboBox.RowSource = "sql statement" 
    call comboBox_AfterUpdate 
End Sub 

Private Sub comboBox_AfterUpdate() 
    listbox.Selected(0) = true 
End Sub 

Private Sub listbox_AFterUpdate() 
    '.... important code that updates the form 
End Sub 

在形式负载/打开时,代码运行作为

Form_Open > comboBox_AfterUpdate > listbox_AfterUpdate 

形式已加载后然而,当组合框被改变并且comboBox_AfterUpdate被触发,listbox_AfterUpdate()没有被触发。

我会将listbox_AfterUpdate()中的代码移动到一个单独的子例程,但这会调用代码以在窗体加载时运行两次。任何想法为什么发生这种情况?

类似的问题在这里: http://www.tek-tips.com/viewthread.cfm?qid=1395160

+2

当通过代码更改控件的值时,'AfterUpdate'事件不会触发。 – Andre

+0

@Andre就是我的想法,但它在窗体加载时会触发。但在窗体已经加载后更改代码中的值不会触发事件。我想禁用这个功能,虽然我很确定这是不可能的。 –

您可以使用两个自定义功能和使用可选参数来了解其被称为上下文。这样你就可以完全控制哪个函数执行哪个操作。

E.g.

Public Sub MyFunc1 (Optional CalledFromLoad As Boolean) 
Public Sub MyFunc2 (Optional CalledFromLoad As Boolean) 

Private Sub comboBox_AfterUpdate() 
    Call MyFunc1 False 
End Sub 
Private Sub listbox_AFterUpdate() 
    Call MyFunc2 False 
End Sub 
Private Sub Form_Open(Cancel As Integer) 
    Call MyFunc1 True 
End Sub 

移动您的所有代码将为您提供更大程度的自定义,并且可以帮助您避免两次调用相同的代码。

您可以在MyFunc1中设置全局变量,然后通过更改列表框来触发MyFunc2,然后再次重置该全局变量。许多解决方案都是可能的。