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

本文关键字:有问题 事件处理 程序 我的 | 更新日期: 2023-09-27 17:58:35

此代码来自一个类

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

我在eventHandler方法上得到一个下划线,上面写着。。

不能简单地转换类型"void"到"系统"。EventHandler"

为什么?

来自我创建的另一个类的代码:

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

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

要指定事件参数,您应该在类中创建一个事件字段,并根据需要将其提升:

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文章

试试这个:

pagebtn.Click += new EventHandler(listTopicPerPage_Click);
这是因为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;
   ...
}    

编辑

pagebtn.Click += listTopicPerPage_Click;