2

我不知道如何破坏事件处理程序方法列表。
例如我有跟随代码。我应该在IF语句中写什么?

public event EventHandler myEvent;
...
myEvent += new EventHandler(met1);
myEvent += new EventHandler(met2);
myEvent += new EventHandler(met3);
...
public void met2(object sender, EventArgs e)
{
...
     if(myCondition)
     {
     //there I want to break execution of all methods assiciated with myEvent event
     //I want to break met2 and don't allow to execute met3
     }
...
}
4

2 回答 2

4

您可以定义您的委托,因此您custom event handler的自定义EventArgs,带有布尔值。

例子:

public class MyEventArg : EventArgs {

    public bool Handle {get;set;}

}

myEvent += new MyEventHandler(met1);

public void met2(object sender, MyEventArgs e)
{

   if(e.Handled)
      return;

   if(myCondition)
   {
       e.Handled = true;
       return;
   }
...
}

这样,如果我们在处理它之前在任何其他事件处理程序中,检查是否Handled == true有一次它被其中一个设置为该状态,其他人将跳过该事件处理。

只是一个想法示例,您必须对其进行更改以适合您的代码确切需求。

于 2013-01-25T13:15:17.290 回答
0

查看 KeyDownEventArgs,有一个Handled可以设置为 true 的属性。
你可以做类似的事情:

class myClass {
    public event EventHandler myEvent;

    myEvent += new EventHandler(met1);
    myEvent += new EventHandler(met2);
    myEvent += new EventHandler(met3);

    public void metN(object sender, MyCustomEventArgs e)
    {
        if(e.Cancel)
            return;

        // Do whatever you like

        if(<someBooleanStatement>)
        {
            e.Cancel = true;
            return;
        }

        // Do whatever you like
    }
}
于 2013-01-25T13:18:52.013 回答