【问题标题】:'System.EventHandler' to 'DevExpress.XtraEditors.Controls.ChangingEventHandler' convert error'System.EventHandler' 到 'DevExpress.XtraEditors.Controls.ChangingEventHandler' 转换错误
【发布时间】:2015-11-25 15:11:24
【问题描述】:
    private void RegisterObjectEvents(XElement xelement, XtraForm form)
    {
        XElement fEventElement = xelement.Element("ObjectEvents");
        if (fEventElement != null)
        {
            var fSubElement = fEventElement.Elements();
            foreach (var item in fSubElement)
            {
                if (!IsformEvent(item.Name.ToString()))
                {
                    Control control = null;
                    for (int i = 0; i <= fObjectList.Count - 1; i++)
                    {
                        if (fObjectList[i].Name == GetObjectNameFromString(item.Name.ToString()))
                        {
                            control = fObjectList[i];
                            break;
                        }
                    }
                    if (control != null)
                    {
                        EventInfo ei = control.GetType().GetEvent(GetEventNameFromString(item.Name.ToString()));                            
                        EventHandler del = (o, args) => ExecuteLua(item.Value, o, args);                            
                        ei.AddEventHandler(control,del );//getting exception here
                    }
                }
            }
        }
    }

    public void ExecuteLua(string luastring,object sender , EventArgs e)
    {
        try
        {              
            Lua.LoadCLRPackage();
            Lua["sender"] = (Control)sender;
            Lua["eventarg"] = e;
            Lua["viewer"] = this;
            Lua["form"] = this.WinForm;                
            Lua.DoString(luastring);               
        }
        catch (Exception exp)
        {
            MessageBox.Show(exp.Message.ToString());
        }
    }

我正在尝试从 Xelement 读取控件对象和事件信息并注册控件的事件运行时。但是得到

'System.EventHandler' 到 DevExpress.XtraEditors.Controls.ChangingEventHandler' 转换异常。

我该如何解决?

【问题讨论】:

  • 我没有看到fObjectList的声明
  • 它已经在课堂上定义和创建了。我没有发送它,因为不是那么重要..

标签: c# eventhandler


【解决方案1】:

我找到了这样的方法;

        public static Delegate ConvertDelegate(Delegate originalDelegate, Type targetDelegateType)
    {
        return Delegate.CreateDelegate(
            targetDelegateType,
            originalDelegate.Target,
            originalDelegate.Method) ;
    }   

我就是这样使用它的;

private void RegisterObjectEvents(XElement xelement, XtraForm form)
    {             
        XElement fEventElement = xelement.Element("ObjectEvents");
        if (fEventElement != null)
        {
            var fSubElement = fEventElement.Elements();
            foreach (var item in fSubElement)
            {
                if (!IsformEvent(item.Name.ToString()))
                {
                    Control control = null;
                    for (int i = 0; i <= fObjectList.Count - 1; i++)
                    {
                        if (fObjectList[i].Name == GetObjectNameFromString(item.Name.ToString()))
                        {
                            control = fObjectList[i];
                            break;
                        }
                    }
                    if (control != null)
                    {
                        EventInfo ei = control.GetType().GetEvent(GetEventNameFromString(item.Name.ToString()));
                        Type tDelegate = ei.EventHandlerType;                           
                        EventHandler del = (o, args) => ExecuteLua(item.Value,o, args);
                        ei.AddEventHandler(control, ConvertDelegate(del, tDelegate));                                  
                    }
                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2014-04-17
    • 2015-11-06
    • 2018-04-19
    • 2019-10-17
    相关资源
    最近更新 更多