在不同的事件处理函数里e的成员都不同比如在Click事件和Load事件里,e就不一样,是怎么回事?我也想通过类似的方法处理两个相似的事件,通过同一个委托,只是传递的参数略为不同

解决方案 »

  1.   

    这和EventHandler有关,如果委托类型相同,可以公用
      

  2.   

    在不同的事件处理函数里e的成员都不同
    比如在Click事件和Load事件里,e就不一样,是怎么回事?
    ==========================================
    当然不同,因为引发的事件是不同的,建议楼主好好看看msdn上关于事件的描述我也想通过类似的方法处理两个相似的事件,通过同一个委托,只是传递的参数略为不同
    ===========================================
    你可以通过多态来实现
      

  3.   

    public interface ieventargs
    {
      void test();}
    第一种事件EventArgs;public class eventargs1:System.EventArgs,ieventargs
    {
       ....//别的代码从略
       public void  test()
      {
         System.Console.Write("事件一");
      }
      
    }
    第二种事件EventArgs;public class eventargs2:System.EventArgs,ievent
    {
      public void test()
     {
        System.Console.Write("事件二");
     }
    }
    引发事件一
    ....
    if( OnEvent1 )
    {
      OnEvent1( this , new EventArg1() );
    }
    ....
    引发事件二
    if( OnEvent2 )
    {
     OnEvent2( this , new EventArg2() );}
    实际处理事件函数
    public void enventhandl( object sender , System.EventArgs e )
    {
       ieventargs ie =  e as ieventargs ;
       ie.test();
        
    }
      

  4.   

    你看看下列代码是不是你要的:
    public delegate void ClickEventHandler(object sender, ClickArgs e);public delegate void LoadEventHandler(object sender, LoadArgs e);public event ClickEventHandler Click;
    public event LoadEventHandler Load;public class ClickArgs:EventArgs
    {
    public  ClickArgs(int id)
    {
    _id=id;
    }
    private int _id;
    public int ID
    {
    set{_id=value;}
    get{return _id;}
    }
    } public class LoadArgs:EventArgs
    {
    public  LoadArgs(int id,string name)
    {
    _id=id;
    _name=name;
    }
    private int _id;
    public int ID
    {
    set{_id=value;}
    get{return _id;}
    }
    private string _name;
    public string Name
    {
    set{_name=value;}
    get{return _name;}
    }
    }
    触发:
    ClickArgs e=new ClickArgs(1);
    if ((this.Click != null))
    {
    this.click(this, e);
    }
    load同上
    调用:
    this.Click+=new ClickEventHandler(ClassEvent_Click);
    this.Load+=new LoadEventHandler(ClassEvent_Load);private void ClassEvent_Click(object sender, ClickArgs e)
    {}private void ClassEvent_Load(object sender, LoadArgs e)
    {}