我有一个事件处理程序的问题(c#)

时间:2011-06-08 12:30:49

标签: c# asp.net events event-handling

此代码来自一个类

 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 个答案:

答案 0 :(得分:2)

要指定事件参数,您应该在班级中创建一个事件字段,并按需提升:

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 article

答案 1 :(得分:0)

试试这个:

pagebtn.Click += new EventHandler(listTopicPerPage_Click);

答案 2 :(得分:0)

修改

pagebtn.Click += listTopicPerPage_Click;

答案 3 :(得分:0)

这是因为listTopicPerPage_Click的方法签名类似于

protected void listTopicPerPage_Click( object sender, EventArgs e )

你可以在这里做几件事,

您可以更新方法签名以使用btnEventArgs而不是EventArgs

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;

   ...
}