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

来源:互联网 发布:炉石传说for mac 国服 编辑:程序博客网 时间:2024/06/11 20:40
       
 /// <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;        }

原创粉丝点击