我定义了一个void write_Click
代码如下
public void write_Click(string str1,string str2,string str3,string a)
{
}
我想给按钮添加一个这个函数的触发事件
如下
b[i].Click += new EventHandler(write_Click(str1, str2, str3, a));
其中三个参数值已定义,但是总是提示我要输入方法名称……
求解释 ,谢谢了。
代码如下
public void write_Click(string str1,string str2,string str3,string a)
{
}
我想给按钮添加一个这个函数的触发事件
如下
b[i].Click += new EventHandler(write_Click(str1, str2, str3, a));
其中三个参数值已定义,但是总是提示我要输入方法名称……
求解释 ,谢谢了。
b[i].Click += new EventHandler(write_Click)
即可,如果参数是必须的,也不要在这里增加,事件会产生sender对象,由对象不同再传递不同参数,
或者像委托那样传参可以试下,外出没环境,如有需要迟些补上。
错误 1 “write_Click”的重载均与委托“System.EventHandler”不匹配 C:\Users\mc\Documents\Visual Studio 2010\Projects\TRY1\TRY1\Form3.cs 500 43 TRY1
求指导……
这里只是把事件处理程序和事件关联起来。事件是由button1按钮内部触发的。因此,即便有办法定义“参数”,你除非能改变系统调用事件的代码(这些被封装在system.forms.dll里面),否则,也没有办法传递这些参数。
public void write_Click(object sender, EventArgs e) {
MyEventArgs myEventArgs = e as MyEventArgs;
string str1 = myEventArgs.str1;
string str2 = myEventArgs.str2;
string str3 = myEventArgs.str3;
// 其他代码。。
}class MyEventArgs : EventArgs {
public string str1 { get; set; }
public string str2 { get; set; }
public string str3 { get; set; }
}
意思有了,但是不正确。把你的 #4 楼的代码可以修改一下,例如:
public class MyClickDelegate
{
public string Str1;
public string Str2;
public string Str3;
public string A; public void write_Click(object sender, EventArgs e) {
MyEventArgs myEventArgs = e as MyEventArgs;
// 其他代码。。
}
} 而主程序则写var clk= new MyClickDelegate{ Str1= str1, Str2=str2, Str3=str3, A=a};
b[i].Click += new EventHandler(clk.write_Click);不过,早在7、8年前,c#就应支持匿名函数了。并且在3、4年前c#也早就支持lamda表达式。因此不论是使用匿名函数还是lamda,其实都不需要这么麻烦地去为了封装这4个参数而单独设计class。