当调用类订阅其中一个事件时,类是否可以响应

时间:2009-12-15 05:34:45

标签: c# winforms

我有一个带有按钮的窗体,我只希望该按钮可见,如果调用它的窗体已订阅其中一个窗体自定义事件。

我知道我可以检查myEvent == null,但是如果在加载表单后订阅了该事件会怎样?

这可能吗?

(也许只是表单上的一个计时器,不断检查事件是否为空?(虽然听起来很乱)

2 个答案:

答案 0 :(得分:4)

如果是自定义事件,您可以将覆盖置于客户端订阅/取消订阅的位置:

   private EventHandler _customEventDelegate;

   public event EventHandler MyCustomEvent
   {
      add
      {
          bool wasNull = (_customEventDelegate == null);
          _customEventDelegate += value;
          if(wasNull)
          {
              this.ChangeButtonVisibility(true);
          }
      }
      remove
      {
          _customEventDelegate -= value;
          if(_customEventDelegate == null)
          {
             this.ChangeButtonVisibility(false);
          }
      }
   }

答案 1 :(得分:2)

就像属性事件也有相关的方法一样:

public event EventHandler MyEvent {
    add {
        // do something
    }
    remove {
        // do something 
    }
}