我编写了一个.NET控件。在System.Web.UI.WebControls.WebControl派生的。其中对于控件的OnClick事件,我用如下代码声明。public event EventHandler ButtonClick
{
add { Events.AddHandler(eventButtonClick,value); }
remove{ Events.RemoveHandler( eventButtonClick,value ); }
}protected void OnButtonClick(WebControlEventArgs e )
{
EventHandler handler = (EventHandler) Events[eventButtonClick];
if ( handler != null )
handler.Invoke(this,e);
}其中 WebControlEventArgs 是派生的 System.EventArgs。我希望在引用该控件的页面中,在使用OnButtonClick方法时,参数 e 能够自动为WebControlEventArgs类型  而不是 System.EventArgs 。可是现在我的控件生成的ButtonClick方法就是如下,其中e参数还是 System.EventArgs。private void DataList1_ButtonClick(object sender, System.EventArgs e)
{}

解决方案 »

  1.   

    public delegate void EventNameEventHandler(object sender, WebControlEventArgs e);
    public event EventNameEventHandler ButtonClick
    {
    add { Events.AddHandler(eventButtonClick,value); }
    remove{ Events.RemoveHandler( eventButtonClick,value ); }
    }
      

  2.   

    EventHandler 是个代码来的, 他的声明如下:
    public delegate void EventHandler(object sender, EventArgs e);现在你要使用别的参数据, 就要另外定义一个代理:
    public delegate void WebControlEventHandler(object sender, WebControlEventArgs e);然后把
    public event EventHandler ButtonClick
    {
    add { Events.AddHandler(eventButtonClick,value); }
    remove{ Events.RemoveHandler( eventButtonClick,value ); }
    }改成
    public event WebControlEventHandler ButtonClick
    {
    add { Events.AddHandler(eventButtonClick,value); }
    remove{ Events.RemoveHandler( eventButtonClick,value ); }
    }在把这一行:
    EventHandler handler = (EventHandler) Events[eventButtonClick];
    改成
    WebControlEventHandler handler = (EventHandler) Events[eventButtonClick];