C#事件参数问题 请高手指教 public delegate void UserRequest(object sender,EventArgs e); 其中的两个参数怎么理解 一定要有它们吗 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sender是指事件的激发者,eventargs是事件的参数,当然,你可以继承eventargs来写自己的事件参数。 我一知半解.msdn上搜委托..自定义的可以是任意参数.只不过那个定义了那两种类型的参数 参数当然可以是任意的,这里只是定义了一个方法委托,而能该委托能够调用的方法必须有object sender和EventArgs e这两个参数,你也可以定义成别的参数,只要委托调用的方法与委托定义的方法有同样的参数类型和个数,就可以了 using System;delegate void DlgDocalcDelegate();//委派声明class EventsHandler{ //private void DoAdd() //{ // AddMethod(); //} private void AddMethod() { long lngFirstValue; long lngSecondValue; long lngSum; Console.Write("请输入第一个进行运算的数值:"); lngFirstValue = long.Parse(Console.ReadLine()); Console.Write("请输入第二个进行运算的数值:"); lngSecondValue = long.Parse(Console.ReadLine()); lngSum = lngFirstValue + lngSecondValue; Console.WriteLine("{0}+{1}={2}", lngFirstValue, lngSecondValue, lngSum); } static void Main() { EventsHandler myEventsHandler = new EventsHandler();//自定义类 calc mycalc = new calc(); //下行指定委派事件到另一个类的方法 mycalc.evtDoCalc += new DlgDocalcDelegate(myEventsHandler.AddMethod);//myEventsHandler.DoAdd); Console.Write("触发加法运算事件----\n"); mycalc.DoCalc();//调用委派类触发事件的方法 }}class calc{ public event DlgDocalcDelegate evtDoCalc;//使用event声明一个由dlgdocalcdelegate委派所支持的时间evtdocalc public void DoCalc()//定义出发evtdocalc事件的方法 { evtDoCalc(); }} [code=C#]using System;delegate void DlgDocalcDelegate();//委派声明class EventsHandler{ //private void DoAdd() //{ // AddMethod(); //} private void AddMethod() { long lngFirstValue; long lngSecondValue; long lngSum; Console.Write("请输入第一个进行运算的数值:"); lngFirstValue = long.Parse(Console.ReadLine()); Console.Write("请输入第二个进行运算的数值:"); lngSecondValue = long.Parse(Console.ReadLine()); lngSum = lngFirstValue + lngSecondValue; Console.WriteLine("{0}+{1}={2}", lngFirstValue, lngSecondValue, lngSum); } static void Main() { EventsHandler myEventsHandler = new EventsHandler();//自定义类 calc mycalc = new calc(); //下行指定委派事件到另一个类的方法 mycalc.evtDoCalc += new DlgDocalcDelegate(myEventsHandler.AddMethod);//myEventsHandler.DoAdd); Console.Write("触发加法运算事件----\n"); mycalc.DoCalc();//调用委派类触发事件的方法 }}class calc{ public event DlgDocalcDelegate evtDoCalc;//使用event声明一个由dlgdocalcdelegate委派所支持的时间evtdocalc public void DoCalc()//定义出发evtdocalc事件的方法 { evtDoCalc(); }}[/code] 纯粹的委托的话,参数和返回值可以随意定制。但是当这个委托用于事件的时候,通常使用void [DelegateName] (object sender, [EventArgs或它的继承类] e)的形式。其中,因为事件可以添加多个方法,有返回值的委托只能返回最后的一个方法的返回值,所以用于事件会导致一些奇怪的问题,所以一般没有返回值;事件处理方法可能同时处理多个对象的相同或相似的事件,所以需要传入sender,以便事件处理方法知道现在在处理那个对象的事件;关于e是用来存放事件处理中必须的相关参数和处理结果的(因为前面说过,事件委托的一般是没有返回值的),根据事件不同,e的类型根据需要变化。但是M$也有个别事件没有遵守以上的约定 wpf播放视频问题。同一个程序,不同电脑播放结果不同。 gridview嵌套分页 C#如何调用非托管DLL? 求助高手大淫们帮忙解决:C#(业务层)DataSet里取数据和更新数据库 本人求一类似qq msn这样的通讯工具,up有分 如何利用sqldatareader判断记录是否重复?希望csdner指点迷津 怎么样从winform 向crystal report 报表传送报表参数? 那位大侠有C#写的VS风格的界面源码?谢谢先。 悬赏: 怎样知道哪个服务在占用CPU???? C#部署安装 C# B窗体使用A窗体的自定义类问题 C# 怎么记录开机关机时间?
delegate void DlgDocalcDelegate();//委派声明
class EventsHandler
{
//private void DoAdd()
//{
// AddMethod();
//}
private void AddMethod()
{
long lngFirstValue;
long lngSecondValue;
long lngSum;
Console.Write("请输入第一个进行运算的数值:");
lngFirstValue = long.Parse(Console.ReadLine());
Console.Write("请输入第二个进行运算的数值:");
lngSecondValue = long.Parse(Console.ReadLine());
lngSum = lngFirstValue + lngSecondValue;
Console.WriteLine("{0}+{1}={2}", lngFirstValue, lngSecondValue, lngSum);
} static void Main()
{
EventsHandler myEventsHandler = new EventsHandler();//自定义类
calc mycalc = new calc(); //下行指定委派事件到另一个类的方法
mycalc.evtDoCalc += new DlgDocalcDelegate(myEventsHandler.AddMethod);//myEventsHandler.DoAdd);
Console.Write("触发加法运算事件----\n");
mycalc.DoCalc();//调用委派类触发事件的方法
}
}
class calc
{
public event DlgDocalcDelegate evtDoCalc;//使用event声明一个由dlgdocalcdelegate委派所支持的时间evtdocalc
public void DoCalc()//定义出发evtdocalc事件的方法
{
evtDoCalc();
}
}
delegate void DlgDocalcDelegate();//委派声明
class EventsHandler
{
//private void DoAdd()
//{
// AddMethod();
//}
private void AddMethod()
{
long lngFirstValue;
long lngSecondValue;
long lngSum;
Console.Write("请输入第一个进行运算的数值:");
lngFirstValue = long.Parse(Console.ReadLine());
Console.Write("请输入第二个进行运算的数值:");
lngSecondValue = long.Parse(Console.ReadLine());
lngSum = lngFirstValue + lngSecondValue;
Console.WriteLine("{0}+{1}={2}", lngFirstValue, lngSecondValue, lngSum);
} static void Main()
{
EventsHandler myEventsHandler = new EventsHandler();//自定义类
calc mycalc = new calc(); //下行指定委派事件到另一个类的方法
mycalc.evtDoCalc += new DlgDocalcDelegate(myEventsHandler.AddMethod);//myEventsHandler.DoAdd);
Console.Write("触发加法运算事件----\n");
mycalc.DoCalc();//调用委派类触发事件的方法
}
}
class calc
{
public event DlgDocalcDelegate evtDoCalc;//使用event声明一个由dlgdocalcdelegate委派所支持的时间evtdocalc
public void DoCalc()//定义出发evtdocalc事件的方法
{
evtDoCalc();
}
}
[/code]
但是当这个委托用于事件的时候,通常使用void [DelegateName] (object sender, [EventArgs或它的继承类] e)的形式。
其中,因为事件可以添加多个方法,有返回值的委托只能返回最后的一个方法的返回值,所以用于事件会导致一些奇怪的问题,所以一般没有返回值;事件处理方法可能同时处理多个对象的相同或相似的事件,所以需要传入sender,以便事件处理方法知道现在在处理那个对象的事件;关于e是用来存放事件处理中必须的相关参数和处理结果的(因为前面说过,事件委托的一般是没有返回值的),根据事件不同,e的类型根据需要变化。但是M$也有个别事件没有遵守以上的约定