WEB开发网
开发学院软件开发C语言 C#中动态订阅控件中任意事件的方法 阅读

C#中动态订阅控件中任意事件的方法

 2010-09-30 22:42:48 来源:WEB开发网   
核心提示: 要实现这样的功能,我们需要用到反射,C#中动态订阅控件中任意事件的方法(2),首先,定义一个泛型方法,它就是定义event所使用的委托类型,为了使开发人员指定的事件能够绑定到上面的DoTrigger函数上,在这个方法里,我们直接对btnNext进行设置

要实现这样的功能,我们需要用到反射。首先,定义一个泛型方法,在这个方法里,我们直接对btnNext进行设置,如下:

1 protected void DoTrigger<T>(object sender, T eventArgs)
2     where T : System.EventArgs
3 {
4     this.btnNext.Enabled = true;
5 }

然后,根据用户给定的控件实例和事件名称,获得EventInfo对象。这个EventInfo里有个重要的属性,就是 EventHandlerType,它就是定义event所使用的委托类型。为了使开发人员指定的事件能够绑定到上面的DoTrigger函数上,我们需要知道那个EventArgs的具体类型,下面的代码可以将某个委托类型的所有参数类型全部读取出来:

01 private Type[] GetDelegateParameterTypes(Type d)
02 {
03     if (d.BaseType != typeof(MulticastDelegate))
04     {
05         throw new InvalidOperationException("Not a delegate.");
06     }
07  
08     MethodInfo invoke = d.GetMethod("Invoke");
09     if (invoke == null)
10     {
11         throw new InvalidOperationException("Not a delegate.");
12     }
13  
14     ParameterInfo[] parameters = invoke.GetParameters();
15     Type[] typeParameters = new Type[parameters.Length];
16     for (int i = 0; i < parameters.Length; i++)
17     {
18         typeParameters[i] = parameters[i].ParameterType;
19     }
20  
21     return typeParameters;
22 }

Tags:动态 订阅 控件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接