检查是否附加了事件处理程序和事件

时间:2016-02-26 09:40:53

标签: c# events event-handling

添加处理程序

if(!ClickHandled)
    this.Click += (s, e) =>{ }

删除处理程序:

if(ClickHandled)
    this.Click -= (s, e) =>{ }

有没有办法知道是否已经有一个附加到控件的事件处理程序(并且可能获取它们的列表,例如获取click事件的事件处理程序列表)?

3 个答案:

答案 0 :(得分:1)

您可以实现从EventHandler继承的类。对于此类,您可以实现所需的任何其他行为。例如,您可以创建一个包含对象事件映射的集合,并且可以实现一个搜索给定对或模式的方法。

答案 1 :(得分:0)

你可以这样做,假设你有权访问课程来源。请注意这样你就可以控制何时将所有代表调用给你班级的客户,这不是一个好主意。如果您不是在寻找事件处理程序列表,而只是想知道事件是否已订阅。可能您可以使用另一种方法,该方法仅告知任何人是否订阅了click事件。

 class MyButton
    {
     delegate void ClickHandler(object o ,EventArgs e);
     public event ClickHandler Click;
     ......

      public List<ClickHandler> ClickHandlerList
      {
         get
          {
              return ClickHandler.GetInovationList().Cast<ClickHandler>().ToList();
          }
       }

      public bool IsClickEventSubcribed
      {
         get
          {
              return ClickHandler.GetInovationList().Cast<ClickHandler>().Any();
          }
       }
    }

答案 2 :(得分:-1)

如果这样做的目的是停止向事件监听器发送信号,那么通过支票包裹发送会不会更容易?

if (NotifyingEnabled)
{
    SomeEvent.Raise(this);
}