[英]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.