【问题标题】:cannot convert from 'method group' to 'System.EventHandler'无法从“方法组”转换为“System.EventHandler”
【发布时间】:2013-10-02 12:35:47
【问题描述】:

你好 StackOverflow 社区,

我正在使用 c# 开发一个 .NET windows 应用程序,并将一个库项目重建为两个,因为我想在另一个项目中使用一些类。

但是,自从我进行更改后,我收到错误消息:编译时无法从“方法组”转换为“System.EventHandler”。来自一直有效的类/方法。

该应用程序是一个复杂的映射应用程序,它根据自动读取的 CRM 和 Web 服务 WSDL 信息,使用对象、父子关系、默认值、列表对象和附加功能来构建 xml / xsd 映射。

以下行给出了错误:“mappingPickListControls = new MappingPickListControls(pMappingPickList, optionMetadataCollection, ValidationRegister, imglblMandatory, tbControlToValidate_validating);”

将事件处理程序提供给控件构建器,以确保该方法可以被正确的控件调用以验证正确的信息。

CRMMappingPickListForm:

private void tbControlToValidate_validating(object sender, CancelEventArgs e)
    {
        ValidateControl(this, (Control)sender);
    }

public CRMMappingPickListForm(Ciber.Crm.MappingCRMTo.Data.CustomOptionMetadataCollection optionMetaDataCol, Point location, Size size)
    {
        InitializeComponent();
        this.Location = new Point (location.X + (size.Width / 2) - (Size.Width / 2), location.Y + (size.Height / 2) - (Size.Height / 2));
        optionMetadataCollection = optionMetaDataCol;

        ValidationRegister = new FormValidationRegister();
        ValidationRegister.ControlValidationRegister.Add(new ControlValidation("tbConfigurationName", 1, "configuration name", 1));
        mappingPickListControls = new MappingPickListControls(pMappingPickList, optionMetadataCollection, ValidationRegister, imglblMandatory, tbControlToValidate_validating);
    }

MappingPickListControls:

public MappingPickListControls(Panel pMappingPickList, CustomOptionMetadataCollection optionMetaDataCol, FormValidationRegister ValidationRegister, Bitmap imglblMandatory, EventHandler tbControlToValidate_validating) 
    {
        lblPickListValueList = new List<Label>();
        tbPickListMappedValueList = new List<TextBox>();
        foreach (CustomOptionMetadata optionMetaData in optionMetaDataCol)
        {
            AddMapping(pMappingPickList, optionMetaData, ValidationRegister, imglblMandatory, tbControlToValidate_validating);
        }
    }

我的解决方案中有 3 个项目:

MappingCRMTo: 拥有所有的windows窗体,包括CRMMappingPickListFOrm MappingCRMTo.Controls:拥有所有的表单扩展和表单相关的类。这是我创建的新项目库。它还包括 MappingPickListControls,它是控件构建器类之一。 MappingCRMTo.Data:拥有所有序列化对象、WSDL 阅读器、zip 创建器和我喜欢在其他一些项目中使用的其他类。它是 MappingPickListControls

位置

【问题讨论】:

  • 看过帖子,试过了,但我的情况不同,因为我的主要问题实际上是为什么在这个小改动之后它不再起作用了
  • 见下面的评论。 我不明白的是我根本没有更改代码。我刚刚创建了一个新的项目库并移动了类,重命名了命名空间。为什么这不再起作用了?

标签: c# .net mapping


【解决方案1】:

EventHandler 委托具有以下定义:

public delegate void EventHandler(Object sender, EventArgs e)

您的方法具有以下签名:

private void tbControlToValidate_validating(object sender, CancelEventArgs e)

它们不是完全匹配的,因此您不能直接将该方法分配给EventHandler 委托。

这个方法的调用者想要传入一个EventArgs对象,但是这个方法需要一个CancelEventArgs

由于您实际上并没有使用这些参数,因此最简单的选择是将您的方法更改为以下内容:

private void tbControlToValidate_validating(object sender, EventArgs e)

【讨论】:

  • 这对您有帮助,谢谢。您是否知道为什么我现在在将其移至新项目库后出现此错误而之前没有?
  • @KevinHendricks 以前肯定是个错误。您必须更改了与问题相关的内容;要么你改变了签名,你改变了使用的委托,你改变了你正在访问的方法,或者其他什么。该方法以前不可能转换为该委托。
  • 我会再看看我的历史。再次感谢您的快速回复。
猜你喜欢
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多