5

我正在开发一个表单自定义控件。该控件是一个 MonthCalendar,如 Visual Studio(C#) MonthCalendar 控件,我想为我的控件定义一个事件。如何为这个表单自定义控件定义一个新事件?

4

2 回答 2

9

如果您的活动不应提供任何其他信息(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));
}

创建受保护的方法以由声明事件的类的后代引发事件是一种很好的做法。使用事件命名约定的好习惯:

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

正如 Thorsten 所说,创建virtual引发事件的方法的良好实践。它不仅允许从后代引发事件,还可以禁用事件引发,或在事件引发之前/之后添加一些行为。

于 2012-05-10T12:07:56.917 回答
0
public event EventHandler<EventArgs> YourEvent;
于 2012-05-10T07:40:00.510 回答