簡體   English   中英

C#中的自定義控件事件

[英]Custom Control Events in C#

我正在嘗試創建一個自定義控件,並且需要從中引發一個事件。 這個想法是在點擊事件(OnAfterClick)的結尾引發一個事件。 我找到了一個或兩個有關此操作的教程,但顯然缺少某些地方; 我有以下幾點。

在控件中:

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'

誰能告訴我我所缺少的,還是對此有誤解?

您的事件被聲明為AfterClickEvnt類型,但是您正在嘗試使用EventHandler對其進行訂閱。 您無法在兩者之間進行轉換。

選項:

  • 明確指出正確的類型:

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

     this.MyButton.AfterClick += cmdMyButton_Click; 

順便說一句,我建議您刪除自定義委托類型,而改用通用EventHandler<T>委托:

public event EventHandler<AfterClickEventArgs> AfterClick;

您的代碼中存在一些差異,因此很難說是怎么回事。 (myArgs變為newArgs,而AfterClickUpdateEvnt變為AfterClickEvnt)。 您還嘗試使用EventHandler代替您的委托。

另外,最好使用EventHandler<T>這樣您就不必麻煩委托了:

public event EventHandler<AfterClickEventArgs> AfterClick;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM