如何抑制方法被触发?

时间:2011-02-07 23:39:01

标签: c# winforms

我正在编写一个Windows窗体应用程序,其中包含一个关于正在添加启动的应用程序的复选框(通过注册表)。如果用户选中该框,则CheckedChanged事件处理程序会触发尝试将应用程序添加到注册表的方法。如果由于任何原因导致此操作失败,我想将复选框恢复为未选中状态,但这样做会再次以递归方式触发该方法。我怎么能避免这个?

同样,当应用程序首次加载时,我会查看注册表并相应地设置复选框的初始状态。当我以编程方式设置复选框的状态时,会触发偶数处理程序,这是我不想要的。

有什么方法可以抑制偶数处理程序触发CheckedChanged方法?

3 个答案:

答案 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;
   ....
}

并相应地设置标志。