zoukankan      html  css  js  c++  java
  • C#: 根据事件名称动态添加事件

    public static void BindCmdWithEventSrc(object eventSrc, string eventName, ICmd cmd)
    {
        Action act 
    = delegate
        {
        
    if (cmd != null)
        {
            cmd.Execute();
        }
        };

        EventInfo ei 
    = eventSrc.GetType().GetEvent(eventName);
        var handlerType 
    = ei.EventHandlerType;
        var eventParams 
    = handlerType.GetMethod("Invoke").GetParameters();
        
    //lambda: (object x0, EventArgs x1) => d()       
        var parameters = eventParams.Select(p => Expression.Parameter(p.ParameterType, "x"));
        
    // - assumes void method with no arguments but can be         
        
    //   changed to accomodate any supplied method       
        var body = Expression.Call(Expression.Constant(act), act.GetType().GetMethod("Invoke"));
        var lambda 
    = Expression.Lambda(body, parameters.ToArray());

        var del 
    = Delegate.CreateDelegate(handlerType, lambda.Compile(), "Invoke"false);
        ei.AddEventHandler(eventSrc, del);
    }

    public static void BindCmdWithEventSrc(object[,] bindings)
    {
        
    // bind control and command 
        for (int i = 0; i < bindings.GetLength(0); i++)
        {
        
    object eventSrc = bindings[i, 0];
        
    string eventName = bindings[i, 1as string;
        ICmd cmd 
    = bindings[i, 2as ICmd;

        BindCmdWithEventSrc(eventSrc, eventName, cmd);
        }
    }
  • 相关阅读:
    CMS4.0——后知后觉
    《Mysql 入门很简单》(读后感②)
    《Mysql 入门很简单》(读后感①)
    Mysql 入门
    jQuery ajax中serialize()方法增加其他参数
    简单语法
    音频——H5 audio
    js 中的break continue return
    vue再次入手(数据传递②)
    vue再次入手(数据传递①)
  • 原文地址:https://www.cnblogs.com/mrfangzheng/p/2136324.html
Copyright © 2011-2022 走看看