根据文件事件名 获取控件的绑定事件 (先取消事件,然后在绑定事件)

       
 /// <summary>
        /// 判断控件上是否有某个事件
        /// </summary>
        /// <param name="eventName"></param>
        /// <param name="aComboBoxText"></param>
        /// <returns></returns>
        private bool IsItemExists(string[] eventName, string aComboBoxText)
        {
            List<Delegate> dList = new List<Delegate>();
            List<EventInfo> eList = new List<EventInfo>();
            bool IsItemExists = false;
            foreach (string item in eventName)
            {
                PropertyInfo propertyInfo = _ComboBox.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
                EventHandlerList eventList = (EventHandlerList)propertyInfo.GetValue(_ComboBox, null);
                FieldInfo fieldInfo = _ComboBox.GetType().GetField(string.Format("EVENT_{0}", item.ToUpper()), BindingFlags.Static | BindingFlags.NonPublic);
                Delegate d = eventList[fieldInfo.GetValue(_ComboBox)];
                EventInfo eventInfo = _ComboBox.GetType().GetEvent(item);
                if (d != null)
                {


                    foreach (Delegate temp in d.GetInvocationList())
                    {
                        eventInfo.RemoveEventHandler(_ComboBox, temp);
                    }
                    dList.Add(d);
                    eList.Add(eventInfo);


                }
            }
            if (!String.IsNullOrEmpty(aComboBoxText))
            {
                for (int i = 0; i < _ComboBox.Items.Count; i++)
                {
                    PropertyInfo[] pro = _ComboBox.Items[i].GetType().GetProperties();
                    if (pro.Any(p => p.GetValue(_ComboBox.Items[i], null).Equals(aComboBoxText)))
                    {
                        IsItemExists = true;
                        _ComboBox.SelectedIndex = i;
                        break;
                    }
                }
            }
            if (dList.Count > 0)
            {
                for (int i = 0; i < dList.Count; i++)
			{


                if (dList[i] != null)
                    {
                        foreach (Delegate temp in dList[i].GetInvocationList())
                        {
                            eList[i].AddEventHandler(_ComboBox, temp);
                        }


                    }
                }
            }
            return IsItemExists;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值