访问列表框更新后不更新时选择= 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
答
您可以使用两个自定义功能和使用可选参数来了解其被称为上下文。这样你就可以完全控制哪个函数执行哪个操作。
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
,然后再次重置该全局变量。许多解决方案都是可能的。
当通过代码更改控件的值时,'AfterUpdate'事件不会触发。 – Andre
@Andre就是我的想法,但它在窗体加载时会触发。但在窗体已经加载后更改代码中的值不会触发事件。我想禁用这个功能,虽然我很确定这是不可能的。 –