Ошибка неявного преобразования динамического шаблона C# из System.EventHandler в System.EventHandler‹TEventArgs›

Код:

    public void InstantiateIn(System.Web.UI.Control container)
    {
        PlaceHolder ph = new PlaceHolder();
        SectionArgs e = new SectionArgs();
        ph.DataBinding += new EventHandler<SectionArgs>(ItemTemplate_DataBinding);
        container.Controls.Add(ph);
    }

    static void ItemTemplate_DataBinding(object sender, SectionArgs e)
    {
        PlaceHolder ph = (PlaceHolder)sender;
    }

Ошибка: невозможно неявно преобразовать тип «System.EventHandler‹UserControlLibrary.Section.ItemTemplate.SectionArgs›» в «System.EventHandler»


person Community    schedule 15.01.2010    source источник
comment
Спасибо, BFree, я нигде не видел эту кнопку редактирования!   -  person    schedule 15.01.2010
comment
привет Майкл, какое было решение здесь?   -  person andrew    schedule 15.02.2011


Ответы (1)


Ошибка получена, потому что PlaceHolder.DataBinding — это EventHandler, а не EventHandler<SectionArgs>, но вы пытаетесь подписаться с неправильным типом делегата.

Это должно быть:

public void InstantiateIn(System.Web.UI.Control container) 
{ 
    PlaceHolder ph = new PlaceHolder(); 
    SectionArgs e = new SectionArgs(); 
    ph.DataBinding += new EventHandler(ItemTemplate_DataBinding); 
    container.Controls.Add(ph); 
} 

static void ItemTemplate_DataBinding(object sender, EventArgs e) 
{ 
    PlaceHolder ph = (PlaceHolder)sender; 
} 

Вышеупомянутое будет работать правильно.

person Reed Copsey    schedule 15.01.2010
comment
Проблема в том, что я не могу передать свои пользовательские аргументы событий таким образом. Это, по-видимому, единственный способ передать данные. SectionArgs необходим, так как они содержат мои данные. Вышеупомянутое является упрощенной версией того, что на самом деле представляет собой мой код. - person ; 15.01.2010
comment
Поэтому, если вы знаете, что e всегда равно SectionArgs, вы можете просто привести его в обработчике событий следующим образом: SectionArgs sectionArgs = e as SectionArgs; - person Igor Zevaka; 30.08.2010