我在带有复选框的Word表单上有以下代码。当我选中一个方框时,我想要清除其他方框。因此,当R00
已经过检查并检查R01
并且我开始逐步完成sub R01_CheckBox_Click()
时,它会跳转到sub R00_CheckBox_Click()
,然后会跳过几行,然后再回复到sub R01_CheckBox_Click()
。我将其更改为_afterupdate()
并且正常工作。任何人都可以解释为什么调试器的行为与_click
一起使用时的行为?
Private sub R00_CheckBox_Click()
R00_CheckBox = true
R01_CheckBox = false
R02_CheckBox = false
R03_CheckBox = false
R04_CheckBox = false
End sub
Private sub R01_CheckBox_Click()
R00_CheckBox = false
R01_CheckBox = true
R02_CheckBox = false
R03_CheckBox = false
R04_CheckBox = false
End sub
Private sub R02_CheckBox_Click()
R00_CheckBox = false
R01_CheckBox = false
R02_CheckBox = true
R03_CheckBox = false
R04_CheckBox = false
End sub
答案 0 :(得分:1)
修改以增强解释
这是因为只要您更改其状态(即其Click
属性),就会触发复选框Value
事件,无论您是在UI上执行还是按代码。
假设从未选中的所有复选框开始,您点击R00_CheckBox
一个:
它会触发其Click
事件处理程序,该处理程序在不实际更改任何复选框的状态的情况下进行处理,只需检查R00_CheckBox
(即设置为True
,这就是你在Click
事件处理程序中的原因,而所有其他复选框都已设置为False
然后点击R01_CheckBox
:
会触发其Click
事件,其第一个语句为R00_CheckBox = False
但R00_CheckBox
当前州为True
,因此会触发R00_CheckBox_Click
事件。
然后您现在暂停 R00_CheckBox_Click
事件处理并开始新的R00_CheckBox_Click
第一个语句是R00_CheckBox = False
,但R00_CheckBox
当前州是True
,因此您将州更改为{{ 1}}因此暂停当前事件处理程序处理并切换到False
一个
,其第一个语句为R00_CheckBox_Click
,然后您再次将其州从R00_CheckBox = True
更改为False
,因此暂停当前True
事件处理并启动一个全新的
现在的R00_CheckBox_Click
事件再次以R00_CheckBox_Click
开始,R00_CheckBox = True
状态,所以这次没有{&1;} t再次触发自身并继续下一个R00_CheckBox
语句,然而它会更改R01_CheckBox = False
的状态,因此暂停当前{{1} } event并开始一个新的R01_CheckBox
现在R00_CheckBox_Click
事件再次以R01_CheckBox_Click
开始,更改R01_CheckBox_Click
州并触发R00_CheckBox = False
事件,因此暂停< / em>本身又开始了另一个全新的R00_CheckBox
活动...
......然后......然后......
您多更好地切换到R00_CheckBox_Click
控件,其行为正是您想要的控件:当您检查其中一个时,所有其他控件都会自动取消选中。没有所有递归事件处理程序调用
你可以通过查询默认的R00_CheckBox_Click
属性来获得他们的状态,如下所示:
OptionButton