平时在开发时,有时候需要手动添加事件和移除事件..大多数时候是移除和添加成对出现,然后中间添加代码,以防止执行中间的代码时触发事件. 可有的时候不小心还是会导致多次触发事件, 这里就提供一个一次移除所有事件委托的便捷方法.代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
/// <summary>
/// 移除事件上绑定的所有委托
/// </summary>
/// <param name="sender">触发事件源</param>
/// <param name="eventName">事件名称</param>
/// <param name="del">要移除事件对应的委托</param>
public void RemoveAllEvent(object sender, string eventName, Delegate del)
{
Type type = sender.GetType();
System.Reflection.EventInfo[] eventInfos = type.GetEvents(); //获取所有事件信息
foreach (System.Reflection.EventInfo var in eventInfos)
{
if (var.Name.Trim().ToUpper() == eventName.Trim().ToUpper()) //移除指定的事件
{
var.RemoveEventHandler(sender, del);
}
}
}
调用代码:
//调用
EventHandler del = button3_Click; //EventHandler委托名根据事件绑定的委托,这里以click事件为例.继承与delegate
RemoveAllEvent(sender, "Click", del);