1

我正在尝试创建一个自定义控件并需要从中引发一个事件。这个想法是在点击事件(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”

谁能告诉我我错过了什么,或者对此有误解吗?

4

2 回答 2

3

您的事件被声明为 type AfterClickEvnt,但您尝试使用EventHandler. 你不能在两者之间转换。

选项:

  • 明确说明正确的类型:

    this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
    
  • 使用隐式方法组转换:

    this.MyButton.AfterClick += cmdMyButton_Click;
    

顺便说一句,我建议您删除自定义委托类型,而使用通用EventHandler<T>委托:

public event EventHandler<AfterClickEventArgs> AfterClick;
于 2010-05-01T14:29:12.627 回答
0

您的代码中存在一些差异,因此很难说发生了什么。(myArgs 变为 newArgs,AfterClickUpdateEvnt 变为 AfterClickEvnt)。您还尝试使用 EventHandler 代替您的委托。

此外,最好使用EventHandler<T>这样您就不必为委托而烦恼:

public event EventHandler<AfterClickEventArgs> AfterClick;

于 2010-05-01T14:29:31.053 回答