日期:2014-05-17  浏览次数:21063 次

关于反射方法的调用,救命啊。
工作需要,用到winform的PropertyGrid,要在下面的红色框的位置加鼠标事件,用正常PropertyGrid自带的鼠标事件完全没有响应,捕获不到.
通过继承PropertyGrid在构造是可以注册鼠标事件。
foreach (Control control in this.Controls)
            {
                Type controlType = control.GetType();
                if (controlType.Name == "PropertyGridView")
                {
                    control.MouseDoubleClick += ((object sender, MouseEventArgs e) =>
                        {
                            MessageBox.Show("Hello.");
                        });
                }
            }

但这个在红框左侧那一栏响应,红框所在的一列还是无法响应。
通过反编译查到PropertyGrid中的gridView中的selectedGridEntry是显示Name和Jack的控件,但是这个控件没有可以直接注册的鼠标事件。而是自身调用两个方法注册的事件,我想注册的话就要调用这两个方法。两个方法代码如下。
        
        public virtual void AddOnValueDoubleClick(EventHandler h)
        {
            this.AddEventHandler(EVENT_VALUE_DBLCLICK, h);
        }
        protected virtual void AddEventHandler(object key, Delegate handler)
        {
            lock (this)
            {
                if (handler != null)
                {
                    for (EventEntry entry = this.eventList; entry != null; entry = entry.next)