背景:
在地图上创建要素离不开地图绑定的MouseDown事件,由于创建点和创建线绑定的MouseDowm又不一样。
我切换按钮时去除了事件的绑定,但是他不切换按钮而是切换了编辑图层(可能从线编辑到点编辑、也有可能是从点编辑到线编辑),编辑后我们希望上一个MouseDown销毁。
(1)找到不得MouseDown手动写代码移除,如:
axMap.MouseDownEvent -= MapEventHelper.AddPipePointByClick;
(2)将axMap.MouseDownEvent下的所有方法都清空了。
/// <summary>
/// 清除事件绑定的函数
/// </summary>
/// <param name="objectHasEvents">拥有事件的实例</param>
/// <param name="eventName">事件名称</param>
public static void ClearAllEventsByName(this AxMap map, string eventName)
{
if (map == null)
{
return;
}
try
{
//获取该实体所有公开用户可访问的方法事件
EventInfo[] events = map.GetType().GetEvents(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (events == null || events.Length < 1)
{
return;
}
for (int i = 0; i < events.Length; i++)
{
EventInfo ent = events[i];
//判断是不是我们找的那个事件
if (ent.Name == eventName)
{
FieldInfo fi = ent.DeclaringType.GetField(eventName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (fi != null)
{
//设置该事件委托对象为空
fi.SetValue(map, null);
}
break;
}
}
}
catch
{
}
}