VB.NET Tips - フォーム上のコントロールのイベント処理の関連付け
フォーム上のコントロールへのイベント処理を宣言する場合には、
以下の図の様に各コントロールを選択し、右側のイベントの中から選択すると、
対応するイベントの処理関数の宣言が自動で生成を行ってくれます。
通常はこの方法で良いのですが、多くのコントロールに設定するには手間ですし、
同じ様な処理の場合には、処理関数を1個作成しそれを各コントロールに設定したいものです。
そこで
AddHandler メソッドを使うことになります。
MSDNの説明によれば以下の様になっています。
AddHandler ステートメントについて
AddHandler event, AddressOf eventhandler
指定項目
event 処理するイベントの名前。
eventhandler イベントを処理するプロシージャの名前。
解説
AddHandler ステートメントと RemoveHandler ステートメントを使うと、
プログラムの実行中にいつでもイベント処理を開始および停止できます。
eventhandlerプロシージャのシグネチャは、eventイベントのシグネチャと一致する必要があります。
今回の例としては、フォーム上に3個の TextBox を貼り付けています。
[Enter]キーを押下することで3個の TextBox のフォーカスが移動します。
更に、フォーカスが渡った TextBox の文字列が反転表示されます。
フォーム上のコントロールのイベント処理の関連付け
01 | Public Class frmAddHandler |
06 | Private Sub frmAddHandler_Load(sender As Object , e As EventArgs) Handles Me .Load |
08 | Call Me .SetEvent( Me .Controls) |
17 | Private Sub SetEvent( ByVal CtrlColl As Control.ControlCollection) |
19 | Dim objControl As Control |
21 | Dim objTextBox As TextBox |
24 | For Each objControl In CtrlColl |
25 | If TypeOf objControl Is TextBox Then |
27 | objTextBox = DirectCast (objControl, TextBox) |
29 | AddHandler objTextBox.Enter, AddressOf CtrlEnterEvent |
31 | AddHandler objTextBox.TextChanged, AddressOf CtrlTextChangedEvent |
40 | Private Sub CtrlEnterEvent( ByVal sender As Object , ByVal e As System.EventArgs) |
41 | If TypeOf sender Is TextBox Then |
43 | DirectCast (sender, TextBox).SelectAll() |
50 | Private Sub CtrlTextChangedEvent( ByVal sender As Object , ByVal e As System.EventArgs) |
51 | If TypeOf sender Is TextBox Then |
53 | Dim objTextBox As TextBox = DirectCast (sender, TextBox) |
55 | objTextBox.Tag = objTextBox.Text |
62 | Private Sub frmEnterNext_KeyDown( ByVal sender As Object , ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase .KeyDown |
63 | If e.KeyCode = Keys.Enter Then |
64 | If e.Control = False Then |
66 | Me .SelectNextControl( Me .ActiveControl, Not e.Shift, True , True , True ) |
74 | Private Sub frmEnterNext_KeyPress( ByVal sender As Object , ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase .KeyPress |
75 | If e.KeyChar = ControlChars.Cr Then |