События пользовательского элемента управления в C#
Я пытаюсь создать пользовательский элемент управления и должен вызвать событие из него. Идея состоит в том, чтобы вызвать событие в конце события click (OnAfterClick). Я нашел один или два учебника по этому вопросу, но явно упустил где-то шаг; У меня есть следующее.
В контроле:
public class AfterClickEventArgs : EventArgs
{
...
}
public partial class MyButton : CommandButton
{
public delegate void AfterClickEvnt(object sender, AfterClickEventArgs e);
public event AfterClickUpdatedEvnt AfterClick;
}
protected override void OnClick(EventArgs e)
{
...
Processing here
...
AfterClickEventArgs myArgs = new AfterClickEventArgs();
AfterClick(this, myArgs);
}
В программе используется элемент управления:
В InitializeComponent():
this.MyButton.AfterClick += new System.EventHandler(this.cmdMyButton_Click);
Эта строка дает мне ошибку компиляции (cmdMyButton_Click существует). Он говорит мне: не могу неявно преобразовать тип 'System.EventHandler' в 'Namespace.MyButton.AfterClick'
Может кто-нибудь сказать мне, что мне не хватает, или недоразумение по этому поводу, пожалуйста?
2 ответа
Ваше событие объявлено типом AfterClickEvnt
, но вы пытаетесь подписаться на него, используя EventHandler
, Вы не можете конвертировать между двумя.
Опции:
Явно укажите правильный тип:
this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
Используйте неявное преобразование группы методов:
this.MyButton.AfterClick += cmdMyButton_Click;
Кстати, я предлагаю вам удалить свой собственный тип делегата и вместо этого использовать общий EventHandler<T>
делегат:
public event EventHandler<AfterClickEventArgs> AfterClick;
В вашем коде есть некоторые несоответствия, поэтому трудно сказать, что происходит. (myArgs стал newArgs, а AfterClickUpdateEvnt стал AfterClickEvnt). Вы также пытаетесь использовать EventHandler вместо вашего делегата.
Кроме того, лучше использовать EventHandler<T>
чтобы вам не пришлось беспокоиться о делегате:
public event EventHandler<AfterClickEventArgs> AfterClick;