2010-05-01 167 views
1

我正試圖創建一個自定義控件,並需要從中引發一個事件。這個想法是在點擊事件(OnAfterClick)結束時引發一個事件。我找到了一兩個關於這樣做的教程,但我明顯錯過了某個步驟;我有以下幾點。C#中的自定義控件事件#

在控制:

public class AfterClickEventArgs : EventArgs 
{ 
    ... 
} 

public partial class MyButton : CommandButton 
{ 
    public delegate void AfterClickEvnt(object sender, AfterClickEventArgs e); 

    public event AfterClickUpdatedEvnt AfterClick; 

} 

protected override void OnClick(EventArgs e) 
{ 
    ... 
    Processing here 
    ... 

    AfterClickEventArgs myArgs = new AfterClickEventArgs();     
    AfterClick(this, myArgs); 
} 

在程序使用控制:

在的InitializeComponent():

this.MyButton.AfterClick += new System.EventHandler(this.cmdMyButton_Click); 

這條線是給我一個編譯錯誤(cmdMyButton_Click確實存在)。它告訴我: 不能隱式地將類型'System.EventHandler'轉換爲'Namespace.MyButton.AfterClick'

任何人都可以告訴我我錯過了什麼,或者誤解了這個嗎?

回答

3

您的活動被宣佈爲AfterClickEvnt,但您嘗試使用EventHandler訂閱該活動。你不能在兩者之間進行轉換。

選項:

  • 明確規定的權利類型:

    this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click); 
    
  • 使用隱式方法組轉換:

    this.MyButton.AfterClick += cmdMyButton_Click; 
    

順便說一句,我建議你刪除你的自定義de使節類型,而是使用通用EventHandler<T>委託:

public event EventHandler<AfterClickEventArgs> AfterClick; 
0

有一個在你的代碼存在一些差異,所以很難說是怎麼回事。 (myArgs成爲newArgs,AfterClickUpdateEvnt成爲AfterClickEvnt)。您還嘗試使用EventHandler代替您的代理。

此外,最好使用EventHandler<T>讓你不必與委託打擾:

public event EventHandler<AfterClickEventArgs> AfterClick;

+0

對不起 - 我已經清理的差異:-) – 2010-05-01 14:40:30