Вопрос

Я пытаюсь создать пользовательский элемент управления, и мне нужно собрать из него событие. Идея состоит в том, чтобы собрать событие в конце события 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'

Кто -нибудь может сказать мне, что мне не хватает, или недоразумение в этом, пожалуйста?

Это было полезно?

Решение

Ваше мероприятие объявлено 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 стал послепериканье). Вы также пытаетесь использовать eventhandler вместо своего делегата.

Кроме того, лучше использовать EventHandler<T> так что вам не нужно беспокоиться с делегатом:

public event EventHandler<AfterClickEventArgs> AfterClick;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top