我正在开发一个表单自定义控件。该控件类似于Visual Studio(C#)中的MonthCalendar控件,我想为我的控件定义一个新事件。 如何为这个表单自定义控件定义一个新事件?
我正在开发一个表单自定义控件。该控件类似于Visual Studio(C#)中的MonthCalendar控件,我想为我的控件定义一个新事件。 如何为这个表单自定义控件定义一个新事件?
如果您的事件不需要提供任何附加信息(Foo是您的事件名称):
public event EventHandler Foo;
并按照以下方式提高它:
protected virtual void OnFoo()
{
if (Foo != null)
Foo(this, EventArgs.Empty);
}
EvenArgs
类创建自定义参数类。public class FooEventArgs : EventArgs
{
public string Message { get; private set; }
public FooEventArgs(string message)
{
Message = message;
}
}
这样声明事件:
public event EventHandler<FooEventArgs> Foo;
这样提高它:
protected virtual void OnFoo(string message)
{
if (Foo != null)
Foo(this, new FooEventArgs(message));
}
在声明事件的类的后代中创建受保护方法来触发事件是一个良好的实践。同时,使用事件命名约定也是一个好的实践:
正如Thorsten所说,创建虚拟方法来触发事件是一种良好的做法。这不仅允许从后代中引发事件,还可以禁用事件的引发或在事件引发之前/之后添加某些行为。
public event EventHandler<EventArgs> YourEvent;
OnXXX
的protected virtual void
方法触发事件,其中XXX
是您的事件名称。在上面的示例中:protected virtual void OnFoo(...)
。 - Thorsten Dittmarvirtual
关键字。 - Sergey Berezovskiy