2

我正在使用框架版本 2.0(不能使用 4.0)并且以下将事件处理程序分配给动态创建按钮的方式不起作用:

deleteButton.Click += (object sender, EventArgs e) => DeleteAnswer(sender, e, toDelete);

错误:不能使用“lambda 表达式”,它不是 ISO - 2 C# 的一部分

所以经过一番搜索,我尝试了这种方式:

deleteButton.Click += new System.EventHandler(DeleteAnswer(sender, e, toDelete));

错误:需要方法名称

然后这样:

deleteButton.Click += DeleteAnswer(sender, e, toDelete);

错误:无法将类型“void”隐式转换为“System.EventHandler”


这是我的代码的简短部分:

public partial class Question : System.Web.UI.Page
{

     protected void Page_Load(object sender, EventArgs e)
     {
            //Some Codes Here
           if(//Some Condition)
           {
                Button deleteButton = new Button();
                deleteButton.Click = //Event Handler Here
           }
     }

     protected void DeleteAnswer(object sender, EventArgs e, String answer)
     {
     }

}

分配事件处理程序并传递参数的正确方法是什么?

更新

在此处输入图像描述

4

2 回答 2

4

如果您不需要senderorEventArgs参数,您可以创建一个delegate调用您的方法的方法。

deleteButton.Click += delegate { DeleteAnswer(toDelete); };

protected void DeleteAnswer(string answer)
{
}

否则添加签名

deleteButton.Click += delegate(object s, EventArgs e) { DeleteAnswer(s, e, toDelete); };

protected void DeleteAnswer(object sender, EventArgs e, string answer)
{
}
于 2013-07-27T16:22:56.850 回答
0

You need to provide a delegate name and not its signature -

deleteButton.Click+= ClickHandler;

protected void ClickHandler(object sender, EventArgs e)
{
   DeleteAnswer(sender, e, todelete);
}

protected void DeleteAnswer(object sender, EventArgs e, String answer)
{
}
于 2013-07-27T15:55:22.157 回答