2012-05-10 7 views
3

フォームのカスタムコントロールで作業しています。コントロールはVisual Studio(C#)のMonthCalendarコントロールのようなMonthCalendarであり、コントロールのイベントを定義したいと思います。 このフォームのカスタムコントロールの新しいイベントを定義するにはどうすればよいですか?Windowsフォームのカスタムコントロールのイベントを定義する

答えて

7

あなたのイベントは、任意の追加情報を提供してはならない場合(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を追加:命名規則イベントを使用することも良い方法何かが起こった後に発生したイベント(例えばクリック)

トルステンが述べたようにするために、良い習慣は、イベントを高めるためのvirtualメソッドを作成します。それは子孫からイベントを発生させるだけでなく、イベントの発生を無効にすることも、イベントの発生前後にいくつかの動作を追加することもできます。

+1

さらに、 'OnXXX'という名前の' protected virtual void'メソッドでイベントを発生させることをお勧めします。ここで 'XXX'はイベントの名前です。上の例では、 'protected virtual void OnFoo(...)'です。 –

+0

@ThorstenDittmar正確に!私の悪い - 例では 'virtual'キーワードを忘れました –

0
public event EventHandler<EventArgs> YourEvent;