アプリ版:「スタンプのみでお礼する」機能のリリースについて

.NETにおいて、フォーム上に配置されたコントロールで発生したイベントを、各コントロールごとではなくて、まとめてハンドルする方法はないでしょうか。

例えば次のようなフォームがあります。
(Button1, Button2, Button3は、フォームに配置されたボタンとします)

Public Class MyForm
  Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
  End Sub
End Class


ボタンが3つ程度の場合はこれで良いと思うのですが、例えば(極端に言えば)ボタンが100個ある場合、
Handles Button1.Click, Button2.Click, (途中省略.....) Button100.Click
と書くしかないのでしょうか。

後で対象コントロールが増えたり減ったりした場合に間違いが起こりそうなので、このような書き方は避けたいです。
フォーム上のどのコントロールでも構わないからとにかくクリックイベントが発生したことを知るための方法はないでしょうか。

例えば次のようなかんじでハンドリングできないでしょうか。
Private Sub All_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォーム上の任意のコントロールでのClickイベント
End Sub

(環境はVB.NET2005です)

A 回答 (1件)

AddHandlerを使えば関数とイベントをコード上でハンドルすることができますので


以下のような方法でできるかと思います。(孫コントロールまでしちゃいますが)

-------------------------------
Private Sub SetEvents(ByVal ctrls As System.Windows.Forms.Control.ControlCollection)
   For Each ctrl As Control In ctrls
     If ctrl.HasChildren Then
       SetEvents(ctrl.Controls)
     ElseIf ctrl.GetType Is GetType(Button) Then
       AddHandler ctrl.Click, AddressOf Button_Click
     End If
   Next
End Sub

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  '処理
End Sub
    • good
    • 0
この回答へのお礼

なるほど、AddHandlerで好きなように登録できるのですね。
ありがとうございました!

お礼日時:2009/02/12 16:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!