私はVb.Netのイベントとハンドラーに慣れています。誰かがc#でイベントハンドラーを作成し、イベントを発生させる方法を手伝ってくれるでしょうか。
4 に答える
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
}
C# 2 以降では、次のようなイベント ハンドラーを追加します。
yourObject.Event += someMethodGroup;
の署名はsomeMethodGroup
の委任署名と一致しyourObject.Event
ます。
C# 1 では、次のようなイベント ハンドラーを明示的に作成する必要があります。
yourObject.Event += new EventHandler(someMethodGroup);
これで、メソッド グループ、イベント、およびEventHandler
必須の署名が一致するようになりました。
public MyClass()
{
InitializeComponent();
textBox1.LostFocus += new EventHandler(testBox1_LostFocus);
}
void testBox1_LostFocus(object sender, EventArgs e)
{
// do stuff
}