2013-09-26 43 views
2

你好的StackOverflow社區,無法從「方法組」轉換爲「System.EventHandler」

我的工作在C#.NET程序的Windows應用程序,並重建一個庫項目兩個,因爲我想用一些類在另一個項目中。

但是,由於我的更改,我得到的錯誤是:編譯時無法從'方法組'轉換爲'System.EventHandler'。從一直工作的類/方法。

該應用程序是一個複雜的映射應用程序,基於自動讀取的CRM和Webservice 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

+0

可能重複:HTTP://計算器。COM /問題/ 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

我會再次看看我的歷史。再次感謝您的快速響應。 –

相關問題