連載

プロフェッショナルVB.NETプログラミング

第25回 イベントとイベント・ハンドラ

(株)ピーデー
川俣 晶
2002/11/16

Page1 Page2 Page3

自家製のイベント

 イベントは、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キーワードが付いて、イベントを発生させることを示さなければならない。

 この例では、ボタンを押したときにイベントを発生させるように組んでいるので、独自のイベントを作成する意義が分かりにくいかもしれない。しかし、自作のイベントは、本来は独自のタイミングで発生させるものである。そのようなイベントが必要とされたときに、役に立つ機能といえるだろう。

次回予告

 次回は、言語の動作を選択するオプションに関する解説を予定している。End of Article


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第25回 イベントとイベント・ハンドラ
    1.イベントを処理する
    2.イベントの発生源を識別する
  3.自家製のイベント
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間