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