Visual Basic でなんとなくイベントとデリゲート その2。 - イベント ハンドラ -
前回までで、ごく簡単なイベントの宣言と発生、イベント ハンドラの関連付けについて
なんとなく
わかった気がします。今回は少しだけ補足をしておきますね。
イベントに関連するコードで推奨されていることがあります。(あくまで推奨です。)その1で書いた以下のコードに関してですが、
Public Property DisplayName() As String
Get
Return Me._displayName
End Get
Set(ByVal value As String)
Me._displayName = value
RaiseEvent DisplayNameChanged(Me, New EventArgs)
End Set
End Property
上記コードではDisplayNameプロパティ内でイベントを発生させていますが、イベントを発生させるクラスに OnEventName という名前のプロテクト メソッドを作成し、このメソッド内で対象のイベントを発生させます。(あくまで推奨です。)
今回の場合、OnDisplayNameChanged メソッドを作成します。なお、引数 sender はメソッド内で自身を指定するため、OnDisplayNameChanged メソッドの引数にはしません。
Protected Sub OnDisplayNameChanged(ByVal e As EventArgs)
RaiseEvent DisplayNameChanged(Me, e)
End Sub
DisplayNameプロパティからこのOnDisplayNameChangedの呼び出すことにより、DisplayNameChanged イベントを発生させます。
Public Property DisplayName() As String
Get
Return Me._displayName
End Get
Set(ByVal value As String)
Me._displayName = value
Me.OnDisplayNameChanged(New EventArgs)
End Set
End Property
もう一点はイベント ハンドラとするメソッドの名前についてです。その2で記述した下記のコードに関して、
Private Sub member_DisplayNameChanged(ByVal sender As Object, ByVal e As System.EventArgs)
End Sub
イベント センダ名、アンダースコア、およびイベント名を組み合わせた標準名前付け規則を使用します。(あくまで推奨です。)今回の場合、「member_DisplayNameChanged」はすでにその規則に則って書かれていますね♪
Visual Studioが自動生成するイベント ハンドラもそうなっていますよね。(Buttion1_Click)
これらは推奨されているだけでそうしなければならないというわけではありませんが、コメント欄にてご指摘いただきそうなので書いておきました。
また、データバインディングのおべんきょ。その2。で書かせていただいたように、「'プロパティ名' + Changed」というイベント名はその名前が意味を持ちます。(っていうか、リンク先でイベントとかやってるよ・・・。)
え?そろそろおしまい?
・・・
・・・ ・・・
・・・ ・・・ ・・・
またおちがない・・・。
そろそろ画伯に怒られそうです。orz