連載
プロフェッショナルVB.NETプログラミング
第25回 イベントとイベント・ハンドラ
(株)ピーデー
川俣 晶
2002/11/16
|
|
自家製のイベント
イベントは、VB.NET言語のイベント機能によって発生される。この機能は、システムがブラックボックスとして行うものではなく、一般のプログラマーが新しいイベントを定義することも容易にできるようになっている。以下は自作イベントを記述したサンプル・プログラムである。フォーム上にボタンを1個配置してから、以下のようにコードを編集する。
1: Public Class SampleEventArgs
2: Inherits System.EventArgs
3: Public msg As String
4: End Class
5:
6: Public Class SampleClass
7: Public Event Sample(ByVal sender As Object, ByVal e As SampleEventArgs)
8: Public Sub InvokeEvent()
9: Dim args As New SampleEventArgs()
10: args.msg = "Hello!"
11: RaiseEvent Sample(Me, args)
12: End Sub
13: End Class
14:
15: Public Class Form1
16: Inherits System.Windows.Forms.Form
17:
18: …Windows フォーム デザイナで生成されたコード…
19:
20: Private WithEvents instance As New SampleClass()
21: Private Sub SampleEventHandler(ByVal sender As System.Object, ByVal e As SampleEventArgs) Handles instance.Sample
22: MsgBox("SampleEventHandler called: " + e.msg)
23: End Sub
24:
25: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
26: instance.InvokeEvent()
27: End Sub
28: End Class
|
|
新しいイベントを定義しているVB.NETのサンプル・プログラム6(VB.NETでフォームに1つのボタンを配置しておく必要あり) |
これを実行すると以下のようになる。
|
サンプル・プログラム6の実行結果 |
ここでボタンを押すと以下のようなメッセージ・ボックスが表示される。
|
サンプル・プログラム6の実行結果の[Button1]ボタンを押した場合に表示されるメッセージ・ボックス |
このコードは、6〜13行目のSampleClassクラスの中で発生するイベントを、21〜23行目のSampleEventHandlerクラスで受け取るようになっている。イベントの本体は、7行目で定義されており、Event文を用いて、Sampleという名前のイベントを定義している。イベントは必ず引数が2個になる。最初の引数はSystem.Object型、2番目の引数はすでに述べたとおり、System.EventArgs型か、それを継承したクラスでなければならない。ここでは、第2引数として、独自のSampleEventArgsクラスを1〜4行目で定義している。
イベントを発生させる機能は、8〜12行目のInvokeEventメソッド内に記述している。ここでポイントになるのは、11行目のRaiseEvent文である。これがイベントを発生させる機能を持っている。
さて、SampleClassを利用するように、15〜28行目のForm1クラスを記述している。イベントは、ボタンが押されたときに発生するように25〜27行目のクリック・イベントを記述している。そして、イベントを受け取る側は、21〜23行目のSampleEventHandlerメソッドである。Handlesキーワードの後に、インスタンス変数名とイベント名が記述されて、このイベントを受け取ることを明示している。20行目のSampleClassクラスのインスタンスを収める変数には、WithEventsキーワードが付いて、イベントを発生させることを示さなければならない。
この例では、ボタンを押したときにイベントを発生させるように組んでいるので、独自のイベントを作成する意義が分かりにくいかもしれない。しかし、自作のイベントは、本来は独自のタイミングで発生させるものである。そのようなイベントが必要とされたときに、役に立つ機能といえるだろう。
次回予告
次回は、言語の動作を選択するオプションに関する解説を予定している。
Insider.NET 記事ランキング
本日
月間