为Windows窗体定义自定义控件的事件

Ser*_*eri 4 c# custom-controls visual-studio

我正在处理一个表单自定义控件.该控件是一个MonthCalendar,如Visual Studio(C#)MonthCalendar控件,我想为我的控件定义一个事件.如何为此表单自定义控件定义新事件?

Ser*_*kiy 8

如果您的活动不提供任何其他信息(Foo是您活动的名称):

public event EventHandler Foo;
Run Code Online (Sandbox Code Playgroud)

并以这种方式提高它:

protected virtual void OnFoo()
{
    if (Foo != null)
        Foo(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)

如果需要将一些其他信息传递给事件处理程序,则通过继承自EvenArgs类来创建自定义参数类

public class FooEventArgs : EventArgs
{
    public string Message { get; private set; }

    public FooEventArgs(string message)
    {
        Message = message;
    }
}
Run Code Online (Sandbox Code Playgroud)

以这种方式声明事件:

public event EventHandler<FooEventArgs> Foo;
Run Code Online (Sandbox Code Playgroud)

并以这种方式提高它:

protected virtual void OnFoo(string message)
{
   if (Foo != null)
       Foo(this, new FooEventArgs(message));
}
Run Code Online (Sandbox Code Playgroud)

它的良好实践是为声明事件的类的后代创建用于引发事件的受保护方法.使用事件命名约定的好习惯:

  • -ing为发生事件之前引发的事件添加后缀到事件名称(通常可以取消此类事件)(例如,验证)
  • -ed为发生事件后引发的事件的事件名称添加后缀(例如,单击)

正如托尔斯滕所说,良好的做法是创造virtual引发事件的方法.它不仅允许从后代引发事件,还禁用事件引发,或在事件发生之前/之后添加一些行为.