我正在编写一个Windows窗体应用程序,其中包含一个关于正在添加启动的应用程序的复选框(通过注册表)。如果用户选中该框,则CheckedChanged事件处理程序会触发尝试将应用程序添加到注册表的方法。如果由于任何原因导致此操作失败,我想将复选框恢复为未选中状态,但这样做会再次以递归方式触发该方法。我怎么能避免这个?
同样,当应用程序首次加载时,我会查看注册表并相应地设置复选框的初始状态。当我以编程方式设置复选框的状态时,会触发偶数处理程序,这是我不想要的。
有什么方法可以抑制偶数处理程序触发CheckedChanged方法?
答案 0 :(得分:4)
一种简单的方法是断开处理程序并重新连接它:
void CheckCbxProgrammatically(bool check)
{
myCbx.CheckedChanged -= HandleCheckedChanged;
myCbx.Checked = check;
myCbx.CheckedChanged += HandleCheckedChanged;
}
当你可以避免时,你不想玩弄状态。
答案 1 :(得分:2)
对于这种情况,我声明一个全局bool isCalledManually
并在我不希望它触发事件时将其设置为true。在这种情况下:
If(isCalledManually)
isCalledManually = false;
Else
// do your operations.
答案 2 :(得分:2)
一个简单的标志就足够了。
bool flag;
void ClickEventHandler(Object server, EventArgs e)
{
if (flag) return;
....
}
并相应地设置标志。