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

时间:2012-05-10 07:08:35

标签: c# visual-studio custom-controls

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

2 个答案:

答案 0 :(得分:8)

如果您的活动不提供任何其他信息(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 发生的事情(通常你可以取消这些事件)(例如验证)
  • 为发生事件后引发的事件(例如Clicked)的事件名称添加后缀-ed

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

答案 1 :(得分:0)

public event EventHandler<EventArgs> YourEvent;