9

私はVb.Netのイベントとハンドラーに慣れています。誰かがc#でイベントハンドラーを作成し、イベントを発生させる方法を手伝ってくれるでしょうか。

4

4 に答える 4

12

C# または VB.Net しか知らない開発者は、これが VB.NET と C# の大きな違いの 1 つであることを知らないかもしれません。

VB イベントに関するこの素晴らしい説明を恥ずかしがらずにコピーします。VB は、イベントをアタッチするために宣言構文を使用します。Handles句は、イベントを処理するコードに表示されます。必要に応じて、複数のメソッドで同じイベントを処理したり、複数のイベントを同じメソッドで処理したりできます。Handles 句の使用は、ボタンなどの基になる変数の宣言に表示されるWithEvents修飾子に依存します。AddHandlerキーワードを使用してプロパティ ハンドラーをアタッチし、RemoveHandler で削除することもできます。例えば

Friend WithEvents TextBox1 As System.Windows.Forms.TextBox   

Private Sub TextBox1_Leave(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles TextBox1.Leave
  'Do Stuff '
End Sub

C# では、宣言構文を使用できません。VB.Net AddHandler のように動作するためにオーバーロードされた += を使用します。tster の回答から恥知らずに盗まれた例を次に示します。

public MyClass()
{
    InitializeComponent();
    textBox1.Leave += new EventHandler(testBox1_Leave);
}

void testBox1_Leave(object sender, EventArgs e)
{
  //Do Stuff
}
于 2009-09-28T19:44:12.870 に答える
7

C# 2 以降では、次のようなイベント ハンドラーを追加します。

yourObject.Event += someMethodGroup;

の署名はsomeMethodGroupの委任署名と一致しyourObject.Eventます。

C# 1 では、次のようなイベント ハンドラーを明示的に作成する必要があります。

yourObject.Event += new EventHandler(someMethodGroup);

これで、メソッド グループ、イベント、およびEventHandler必須の署名が一致するようになりました。

于 2009-09-28T18:35:11.020 に答える
3
    public MyClass()
    {
        InitializeComponent();
        textBox1.LostFocus += new EventHandler(testBox1_LostFocus);
    }

    void testBox1_LostFocus(object sender, EventArgs e)
    {
        // do stuff
    }
于 2009-09-28T18:34:55.347 に答える