DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でのイベントハンドラ

環境/言語:[C# .NETFramework4.0]
分類:[.NET]

よろしくお願いします。
VB.NETで趣味でアプリケーションを作っていたのですがC#に移行しようと思い試行錯誤しています。
その中でVBではイベント多くなるのが嫌でしたのでハンドラを一箇所にまとめて
senderで判別していました。C#でも.NETだから出来ると思っていたのですが
イベントハンドラがコードに付かないようでVBのようにはいきませんでした
下記はVBのコードなのですがC#などでは出来るのでしょうか?
それともこういう書き方自体やらない方がいいのでしょうか?よろしくお願いします

Private Sub pb_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles pb_0.MouseClick, pb_1.MouseClick, pb_2.MouseClick, pb_3.MouseClick

If sender Is pb_0 Then
Console.WriteLine("pb_0")
ElseIf sender Is pb_1 Then
ElseIf sender Is pb_2 Then
ElseIf sender Is pb_3 Then
End If

End Sub
C# では、イベントハンドラは += 演算子を使います
(VB では AddHandler ステートメントに当たります)。
VB の Handles キーワードに対応する物はありません。
// もちろん、イベントハンドラに使うメソッド名も関係ありません。
+= 演算子の使い方は、デザイナで適当にイベントハンドラを作ってみて、
designer.cs の「Windows フォーム デザイナで生成されたコード」で
たたまれている部分を調べてみてください。

デザイナでも同じメソッドを複数のイベントのイベントハンドラに設定することができます。
プロパティグリッドの雷アイコンでイベント一覧を表示し、
イベントハンドラを設定したいイベントのとこでドロップダウンを開けば、
そのイベントに相応しい引数を持ったメソッド一覧が表示されます。
この中から設定したいメソッドを選択してください。

> それともこういう書き方自体やらない方がいいのでしょうか?
ハンドラの内容次第ですね。
私の場合、
> If sender Is pb_0 Then
>     Console.WriteLine("pb_0")
> ElseIf sender Is pb_1 Then
>     Console.WriteLine("pb_1")
> ElseIf sender Is pb_2 Then
>     Console.WriteLine("pb_2")
> ElseIf sender Is pb_3 Then
>     Console.WriteLine("pb_3")
> End If
これならまとめないと思います。まとめる意味がありませんから。
でも
Dim btn = DirectCast(sender, Button)
Console.WriteLine(btn.Name)
こう書いて構わないのなら、ひとつにまとめるでしょう。
designer.cs見てみたところ…おーイベントハンドラこんなところに
とてもわかりやすかったです、教えていただきありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板