我正在尝试创建一个自定义控件,并需要从中提出事件。这个想法是在点击事件结束时提出一个事件(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归因
不隶属于 StackOverflow
scroll top