У меня проблема с обработчиком событий (c #) - PullRequest
2 голосов
/ 08 июня 2011

Этот код относится к одному классу

 Button pagebtn = new Button();
 pagebtn.Text = "2";

 pagebtn.Click += 
        listTopicPerPage_Click(this, new btnEventArgs() { btnNumber = 2 });

Я получаю подчеркивание на методе eventHandler, говоря, что ..

не может неявно преобразовать тип 'void' в 'System.EventHandler '.

Почему это так?

Код из другого класса, который я создал:

class btnEventArgs : EventArgs
{
    public int btnNumber { get; set; }
}

Ответы [ 4 ]

2 голосов
/ 08 июня 2011

Чтобы указать параметры события, вы должны создать поле события в вашем классе и увеличить его по требованию:

public partial class WebForm1 : System.Web.UI.Page
{
    public event EventHandler<btnEventArgs> SampleEvent;

    public void DemoEvent(int val)
    {
        // Copy to a temporary variable to be thread-safe.
        EventHandler<btnEventArgs> temp = SampleEvent;
        if (temp != null)
            temp(this, new btnEventArgs { btnNumber = val });
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += new EventHandler(Button1_Click);
    }

    void Button1_Click(object sender, EventArgs e)
    {
        DemoEvent(2);
    }
}

class btnEventArgs : EventArgs 
{
    public int btnNumber { get; set; } 
}

Статья MSDN

0 голосов
/ 08 июня 2011

это потому, что ваша сигнатура метода listTopicPerPage_Click похожа на

protected void listTopicPerPage_Click( object sender, EventArgs e )

Здесь вы можете сделать несколько вещей,

Вы можете обновить сигнатуру метода, чтобы использовать вместо нее btnEventArgsEventArgs

protected void listTopicPerPage_Click( object sender, btnEventArgs e )

или вы можете привести новый btnEventArgs к EventArgs, а затем вернуть его к btnEventArgs в теле метода.

pagebtn.Click += 
    listTopicPerPage_Click(this, (EventArgs) new btnEventArgs() { btnNumber = 2 });

protected void listTopicPerPage_Click( object sender, EventArgs e )
{    
   btnEventArgs bea = (btnEventArgs) e;

   ...
}    
0 голосов
/ 08 июня 2011

Редактировать

pagebtn.Click += listTopicPerPage_Click;
0 голосов
/ 08 июня 2011

просто попробуйте это:

pagebtn.Click += new EventHandler(listTopicPerPage_Click);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...