2011-02-07 26 views
2

我正在写一个Windows窗体应用程序,该应用程序有一个关于正在添加的应用程序启动(通过注册表)的复选框。如果用户选中该框,CheckedChanged事件处理程序会触发一个尝试将该应用程序添加到注册表的方法。如果由于任何原因而失败,我想将复选框恢复为未选中状态,但是这样做会以递归方式再次触发该方法。我怎样才能避免这种情况?我该如何禁止一个方法被触发?

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

有什么办法可以禁止触发CheckedChanged方法的偶处理程序?

回答

2

一个简单的标志就足够了。

bool flag; 

void ClickEventHandler(Object server, EventArgs e) 
{ 
    if (flag) return; 
    .... 
} 

并相应地设置标志。

4

一个简单的方法是将断开处理程序并重新连接:

void CheckCbxProgrammatically(bool check) 
{ 
    myCbx.CheckedChanged -= HandleCheckedChanged; 
    myCbx.Checked = check; 
    myCbx.CheckedChanged += HandleCheckedChanged; 
} 

你不想玩弄状态时,你可以避开它。

+1

虽然这工作毫无疑问,它有取消订阅和订阅事件处理程序的开销。 – 2011-02-07 23:44:30

2

对于这种情况,我声明全局为bool isCalledManually,并在我不希望它触发事件时将其设置为true。在事件中:

If(isCalledManually) 
    isCalledManually = false; 
Else 
    // do your operations. 
相关问题