5

コントロールは、Visual Studio(C#) MonthCalendar コントロールのような 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何かが起こる前に発生したイベントのイベント名にサフィックスを追加します (多くの場合、そのようなイベントをキャンセルできます) (例: Validating)
  • -ed何かが起こった後に発生したイベントのイベント名にサフィックスを追加します (例: Clicked)

Thorsten が述べたように、virtualイベントを発生させるメソッドを作成することをお勧めします。子孫からイベントを発生させるだけでなく、イベントの発生を無効にしたり、イベント発生の前後に何らかの動作を追加したりすることもできます。

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