2009-07-02 42 views
1

我的主頁上有一個按鈕,我希望ContentPage處理按鈕的Click事件。這是我到目前爲止:處理ContentPage上的MasterPage事件

//Event in MasterPage 
public event EventHandler Search_Submit; 

//ButtonClick event in MasterPage 
protected void SearchButton_Click(object sender, EventArgs e) 
    { 
     if (Search_Submit != null) 
     {    
      Search_Submit(this, EventArgs.Empty); 
     } 
    } 


//EventHandler in Page_Init on ContentPage 
Master.Search_Submit += new EventHandler(Master_Search_Submit); 

//Search_Submit event in ContentPage 
private void Master_Search_Submit(object sender, EventArgs e) 
    { 
     //Perform appropriate action... 
    } 

這一切工作 - 但是,我想傳遞一個值的EventArgs。我相信我需要創建一個從EventArgs繼承的自定義EventArgs類,並具有我的自定義屬性。但是,當我這樣做時,我得到以下錯誤:'Master_Search_Submit'沒有超載匹配委託'System.EventHandler'。

回答

2

您已將事件定義爲使用EventHandler委託。委託是指向函數的指針,它定義了響應方法必須具有的簽名。對於事件處理程序委託的簽名是:

delegate void EventHandler(object sender, EventArgs e); 

在.NET 2.0有一個通用的EventHandler委託,允許您指定的EventArgs鍵入您希望使用。

public event EventHandler<MyEventArgs> Search_Submit; 

現在你可以使用一個事件處理程序與簽名

void EventArgs<TArgs>(object sender, TArgs e) where TArgs: EventArgs 

你的情況,這將是:

void Master_Search_Submit(object sender, MyEventArgs e) 
+0

我改變了我的事件聲明,像你提到的,並改變我的事件處理程序使用我的自定義EventArgs類。但是,我仍然在Page_Init類中遇到同樣的錯誤(請參閱原始文章的代碼)。 – 2009-07-02 15:02:09

1

要麼你必須通過你的論點作爲EventArgs並將其投射到您的處理程序中:

private void Master_Search_Submit(object sender, EventArgs e) 
{ 

    MyEventArgs mea = (MyEventArgs)e; 
    //Perform appropriate action... 
} 

或者你必須定義預計您的自定義事件的args類的委託:

public delegate void MyEventHandler(object sender, MyEventArgs mae); 
public event MyEvent myEvent 

myEvent += new MyEventHandler(Master_Search_Submit); 
0

您可以使用,而不是EventHandler委託CommandEventHandler。