我有 5 个复选框来设置宏的一些选项,其中一个是 Select/Unselect All 复选框。当您选择要删除或标记为已读等的邮件时,我想创建类似于您在基于 Web 的邮箱中所拥有的内容。当我选中 Select/Unselect All 复选框时,我将复选框的其余值设置为 true,反之亦然当我取消选中它时。没关系。
当我还想验证是否所有内容都未选中并且我一个一个地检查其他复选框时,问题就出现了,如果最后我选中了所有复选框,那么 Select/Unselect All 复选框将变为选中状态。反之亦然,这意味着如果所有内容都被选中,然后我取消选中其他四个中的一个,那么我将“全部”复选框设置为 false(未选中)。
但似乎即使我只是在 SelectAllCheckbox_Click 事件中设置了值,例如 Option1Checkbox.value = True,它也会触发 Option1Checkbox_Click 和 Option1Checkbox_Change 事件。
它不应该只是触发 Change 事件,因为我实际上并没有单击该复选框吗?
发生的情况是我检查了 SelectAll,因此它将 Option1 变为选中,但是通过这样做,Option1 也会触发 click 事件,因此它取消选中它会再次触发 click 事件,然后再次取消选中 All 复选框,最终留下所有内容未经检查,就像一开始一样。希望这部分足够清楚。
我怎样才能避免这种行为?如何确保仅触发 Change 事件而不触发 Click 事件?
有没有人有过这样的复选框排列并且遇到过类似的问题?或者如果没有我得到的行为,你是如何做到这一点的?
复选框不在表单上,而只是在工作表上。它们是 ActiveX 控件。我所拥有的并不复杂:
Private Sub SelectAll_Click()
Option1Checkbox.Value = SelectAll.Value
Option2Checkbox.Value = SelectAll.Value
Option3Checkbox.Value = SelectAll.Value
Option4Checkbox.Value = SelectAll.Value
End Sub
然后选项复选框单击事件如下所示:
Private Sub Option1Checkbox_Click()
If Option1Checkbox.Value = True And Option2Checkbox.Value = True And Option3Checkbox.Value = True And Option4Checkbox.Value = True Then
SelectAll.Value = True
Else
SelectAll.Value = False
End If
End Sub
这很简单,我看到的最大问题是当复选框未实际单击时对单击事件的调用。
谢谢你的帮助。