2010-09-08 164 views
1

我有一個自定義控件,我們將稱之爲「TheGrid」。自定義控件上的自定義事件

在TheGrid的控件中是另一個我們稱之爲「GridMenu」的控件。

GridMenu在其自己的控件集合中有一個按鈕控件。

我想使用這個控制,以使開發者頁面級方法與按鈕的OnClick GridMenu ALA內心深處的關聯:

<customcontrols:TheGrid id="tehGridz" runat="server" onGridMenuButtonClick="mypagemethod" /> 

回答

4

在GridMenu(我以爲是另一個自定義控制),公開由它聲明爲公共ButtonClick事件:

public event EventHandler ButtonClick; 

如果您願意,您可以通過定義委託和自定義事件參數類來創建自定義事件處理程序。在這個控制邏輯的某個地方,您需要引發事件(可能在GridMenu上包含的按鈕的Clicked事件處理程序中;事件可以級聯)。使用C#進行編碼時,在引發事件之前,您需要檢查事件是否爲空(意味着至少有一個處理程序已連接)。

現在,此事件對TheGrid可見,其中包含GridMenu。現在您需要創建一個「傳遞」來允許TheGrid的用戶附加處理程序,而無需瞭解GridMenu。您可以通過指定TheGrid類似的屬性,並附加從內部事件分離處理的事件做到這一點:

public event EventHandler GridMenuButtonClick 
{ 
    add{ GridMenu.ButtonClick += value;} 
    remove { GridMenu.ButtonClick -= value;} 
} 

從含有TheGrid控制的控制的標記,你現在可以指定事件處理程序通過將它附加到OnGridMenuButtonClicked你想要的方式。

+0

我假設這樣的事情是採取的方法,但無論我做什麼,我都無法獲得識別OnGridMenuButtonClicked的智能。 – 2010-09-08 16:01:06

+0

@ D.Forrest:您必須使用GridMenuButtonClick而不是OnGridMenuButtonClicked – SKINDER 2010-09-08 16:05:30

+0

當然,我明白了。實際上我打電話給我的事件「OnSearchClick」。但是,在添加/刪除聲明的調試中,通過標記和斷點絕對不可見。 – 2010-09-08 16:14:18