public delegate void UserRequest(object sender,EventArgs e);
  其中的两个参数怎么理解 一定要有它们吗 谢谢

解决方案 »

  1.   

    sender是指事件的激发者,eventargs是事件的参数,当然,你可以继承eventargs来写自己的事件参数。
      

  2.   

    我一知半解.msdn上搜委托..自定义的可以是任意参数.只不过那个定义了那两种类型的参数
      

  3.   

    参数当然可以是任意的,这里只是定义了一个方法委托,而能该委托能够调用的方法必须有object   sender和EventArgs   e这两个参数,你也可以定义成别的参数,只要委托调用的方法与委托定义的方法有同样的参数类型和个数,就可以了
      

  4.   

    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();
        }
    }
      

  5.   

    [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]
      

  6.   

    纯粹的委托的话,参数和返回值可以随意定制。
    但是当这个委托用于事件的时候,通常使用void [DelegateName] (object sender, [EventArgs或它的继承类] e)的形式。
    其中,因为事件可以添加多个方法,有返回值的委托只能返回最后的一个方法的返回值,所以用于事件会导致一些奇怪的问题,所以一般没有返回值;事件处理方法可能同时处理多个对象的相同或相似的事件,所以需要传入sender,以便事件处理方法知道现在在处理那个对象的事件;关于e是用来存放事件处理中必须的相关参数和处理结果的(因为前面说过,事件委托的一般是没有返回值的),根据事件不同,e的类型根据需要变化。但是M$也有个别事件没有遵守以上的约定