检查事件处理程序是否附加到事件
Check to see if an event handler is attached to and event
添加处理程序
if(!ClickHandled)
this.Click += (s, e) =>{ }
删除处理程序:
if(ClickHandled)
this.Click -= (s, e) =>{ }
有没有办法知道是否已经有一个事件处理程序附加到控件(并可能获取它们的列表,例如获取单击事件的事件处理程序列表)?
假设您可以访问 class 的源代码,您就可以执行此操作。当心这种方式,您放弃了何时将所有代表呼叫给 class 的客户的控制权,这不是一个好主意。如果您不是在寻找事件处理程序列表,而只是想知道事件是否 subscribed.Probably,您可以使用另一种方法,它只告诉点击事件是否被任何人订阅。
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();
}
}
}
如果这样做的目的是停止向事件侦听器发送信号,那么用支票包装发送不是更容易吗?
if (NotifyingEnabled)
{
SomeEvent.Raise(this);
}
您可以实现从 EventHandler 继承的 class。为此 class 您可以实现任何您想要的额外行为。例如,您可以创建一个集合来保存对象事件映射,您可以实现一个方法来搜索给定的对或模式。
添加处理程序
if(!ClickHandled)
this.Click += (s, e) =>{ }
删除处理程序:
if(ClickHandled)
this.Click -= (s, e) =>{ }
有没有办法知道是否已经有一个事件处理程序附加到控件(并可能获取它们的列表,例如获取单击事件的事件处理程序列表)?
假设您可以访问 class 的源代码,您就可以执行此操作。当心这种方式,您放弃了何时将所有代表呼叫给 class 的客户的控制权,这不是一个好主意。如果您不是在寻找事件处理程序列表,而只是想知道事件是否 subscribed.Probably,您可以使用另一种方法,它只告诉点击事件是否被任何人订阅。
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();
}
}
}
如果这样做的目的是停止向事件侦听器发送信号,那么用支票包装发送不是更容易吗?
if (NotifyingEnabled)
{
SomeEvent.Raise(this);
}
您可以实现从 EventHandler 继承的 class。为此 class 您可以实现任何您想要的额外行为。例如,您可以创建一个集合来保存对象事件映射,您可以实现一个方法来搜索给定的对或模式。