2009-02-24 23 views
4

我覺得這是谷歌應該能夠爲我解決得很好,但我發現很少或沒有我真正理解的例子。我如何給一個ASP.Net自定義控件一個新的自定義事件

我有這個自定義控件稱爲UserControlTask​​。我希望爲它添加一個OnHide事件,顧名思義,我希望在用戶控件被隱藏時拋出它。

我似乎發現很多像OnClick這樣的重寫事件的例子,但沒有一個地方增加了一個全新的事件。

我真正知道的是,我需要聲明的事件處理程序...

public event EventHandler Hide; 

那麼相信OnHide添加到我的CreateChildControls方法的屬性。無論如何,我認爲這是準確的。除此之外,我什麼都不知道。

回答

7

您的問題不加入的情況下(這是很容易:

public event EventHandler Hide; 

// this is the function that raises the event 
private void OnHide() { 
    if (Hide != null) 
     Hide(this, new EventArgs()); 
} 

你的問題是要知道何時調用OnHide()(其中引發事件) - 因爲沒有辦法知道用戶隱藏時控制(我假設你正在談論的事情發生在客戶端),沒有時間,你應該引發此事件。

+0

好的,那麼這個怎麼樣。我瞭解到它繼承的控件有一個OnHide。如果我將它添加到控件中,就像你在這裏顯示的那樣,我可以從繼承的控件發送事件到派生控件嗎? – Carter 2009-02-24 18:12:35

0

您可能會混淆引發事件和事件本身的方法。

Control.OnClick是引發Control.Click事件的方法。在子類中,重寫OnClick(並調用base.OnClick)允許處理,而不需要通過處理程序。

另一方面,構成的控件必須直接使用事件。

0

兩個簡單的事情真的。

的第一件事就是在做你的自定義控件聲明一個事件o bject:

public event System.EventHandler EmployeeSelected; 

然後從那裏,在你的代碼,你的願望,以提高與事件,請執行以下操作:

protected void btnSelectEmployee_Click(object sender, EventArgs e) 
{   
    if (!string.IsNullOrEmpty(txtSearchEmployeeId.Text)) 
    { 
     EmployeeSelected(this, new EventArgs()); 
    }  
} 

然後在主調用類,你消耗的事件和過程如所須。

如果您還想傳遞事件參數,還可以添加一些東西。

注:我從我自己的應用程序添加了一些代碼。我覺得你可以很容易地推斷你自己的應用程序。

0

這只是解決方案的插件。如何在VB中解決這個問題。 將以下內容添加到控件中;

Delegate Sub OnCompleted() 

Public Event Completed As OnCompleted 

需要

RaiseEvent Completed() 

時,然後在父頁面,您可以cacth這樣

<asp:somecontrol OnCompleted="SomeControl_OnCompleted"... 

,然後在代碼來處理後面的那樣的事件在控制引發事件這

Protected Sub SomeControl_OnCompleted() Handles SomeControl.Completed 

容易peazy,只要確保您的事件處理程序與您的委託聲明相同。