C#清除实例绑定的事件

背景:

        在地图上创建要素离不开地图绑定的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
            {
            }
        }

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值