2013-09-26 10 views
2

Здравствуйте StackOverflow сообщества,не может конвертировать из «группы методов» к «» System.EventHandler

Я работаю над приложением .NET окна в C# и перестроен один проект библиотеки два, как я хочу использовать некоторые классы в другом проекте.

Однако после моего изменения я получаю сообщение об ошибке: не удается преобразовать из группы методов в System.EventHandler при компиляции. Из класса/метода, который всегда работал.

Приложение представляет собой сложное приложение сопоставления, которое распределяет сопоставление xml/xsd с объектами, родительскими и дочерними отношениями, значениями по умолчанию, объектами списка и дополнительными функциями на основе автоматического считывания информации о CRM и Webservice WSDL.

Следующая строка дает ошибку: "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: Имеет все окна форм, включая CRMMappingPickListFOrm MappingCRMTo.Controls: Имеет все расширения форм и классы, связанные с формой. Это новая библиотека проектов, которую я создал. Он также включает MappingPickListControls, который является одним из классов построителя управления. MappingCRMTo.Data: Имеет все объекты сериализации, WSDL-ридер, создатель zip и другие классы, которые мне нравятся во всех других проектах. Это старого расположение MappingPickListControls

+0

Возможные дубликат: HTTP: // StackOverflow.ком/вопросы/2479870/как-делать-я-фикс-компилятор ошибок не может-новообращенные-из-методы-группы к системно-delega. – meilke

+0

Видел сообщение, пробовал, но мой сценарий отличается, поскольку мой основной вопрос на самом деле, почему после этого незначительного изменения он больше не работает –

+0

Какие незначительные изменения? – meilke

ответ

3

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) 
+0

Это помогло вам. Вы видите причину, по которой я теперь получаю эту ошибку, переместив ее в новую библиотеку проектов и не сделал этого раньше? –

+0

@KevinHendricks Это наверняка было бы ошибкой раньше. Вы, должно быть, изменили что-то, что имеет отношение к проблеме; либо вы изменили подпись, вы изменили используемый делегат, вы изменили метод, к которому вы обращаетесь, или что-то еще. Невозможно, чтобы этот метод ранее был конвертирован в этот делегат. – Servy

+0

Я еще раз взгляну на свою историю. Еще раз спасибо за быстрый ответ. –

Смежные вопросы