Visual Basic 入門講座
VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

 

Visual Basic 中学校 > 入門講座 >

第4回 イベントを逃すな


この記事が対象とする製品・バージョン (バージョンの確認方法)

VB2005 対応 Visual Basic 2005 対象です。
VB.NET 2003 対応 Visual Basic.NET 2003 対象ですが一部画面が異なる場合があります。
VB.NET 2002 対応 Visual Basic.NET (2002) 対象ですが一部画面が異なる場合があります。
VB6対応 Visual Basic 6.0 × 対象外です。

入門講座の第4回では「イベント」について説明します。前回の「プロパティ」と今回の「イベント」の概要が分かれば、あともう少しで最低限必要な知識はそろいます。がんばって習得してください。

概要

・イベントが発生すると自動的にイベントプロシージャが実行される

・イベントプロシージャの作り方

・画像ファイルを表示させる

 

1.どこにプログラムするのか

 

たとえば、画像を表示するプログラムを作りたいと思ったとして、画像を表示させる方法はインターネット等で検索すればすぐ分かります。多分次のようなコード(プログラム)を発見することでしょう。

VB.NET2002対応 VB.NET2003対応 VB2005対応


Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp")
 

■リスト1

Me (Me = ミー)はこの場合はフォームのことです。BackgroundImage(読み方:BackgroudImage = バックグラウンドイメージ)は 前回も登場しましたが背景画像をあらわすプロパティです。前回はプロパティウィンドウからプロパティを設定する方法を説明しましたが、このように .= を使うことでプログラムからプロパティを設定することができます。(今回はこういったことを理解していなくても大丈夫です)

でも、このプログラムを一体どこに書けばよいのでしょうか?

イベント」をよく理解すればこういった問題で悩むことはあまりなくなります。ともあれ、これを読んでいる方はまだイベントについて何も知らないはずなので、丁寧に順をおって説明しましょう。

問題は「画像をいつ、どのタイミングで表示したいか?」ということです。

フォームが表示されたときはじめから画像を表示したいのか、それとも、ボタンが押されたときに表示したいのか、それともフォームをクリックしたら表示するのか…などなどです。

このようなタイミングのことをVBでは「イベント」といいます。

この例で行くと「フォームが表示された」、「ボタンが押された」、「フォームをクリックした」などがイベントです。そしてイベントごとにプログラムを書く場所はある程度限定されます。

 

2.Clickイベント    〜ボタンが押されたとき

 

では、そろそろ具体的にプログラムしてみましょう。まずはボタンが押されたときに画像が表示されるようにしましょう。

「ボタンが押された」というイベントはClickイベント (読み方:Click = クリック)と呼びます。

まず、新規プロジェクトを作成してください。新しいプロジェクトの作成方法を忘れてしまった方はこちらをご覧下さい。

新しいプロジェクトを作成した直後

■画像1:新しいプロジェクトを作成した直後

そしてフォームにボタンを1つ貼り付けてください。

ボタンを貼り付けた状態

■画像2:ボタンを貼り付けた状態

このボタンがクリックされたらフォームに画像を表示することにします。

まずはボタンをダブルクリックしてください。そうすると、コード編集画面に切り替わります。

ここではボタンをダブルクリックするという手順がとても重要です。デザイン画面とコード編集画面を切り替えるだけならアイコンを使っても行うことができます。

コード編集画面とデザイン画面の切り替え

■画像3:コード編集画面とデザイン画面の切り替え

ボタンをダブルクリックしてコード編集画面に切り替えると自動的に次のコード(プログラム)が生成されるのです。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End Sub

■リスト2:ボタンのClickイベントプロシージャ

アイコンを画面を切り替えた場合はコードが自動生成されませんが、またデザイン画面に戻ってボタンをダブルクリックするとコードを自動生成することができます。また、自動生成しないで自分でキーボードから同じコードを入力しても構いません。

ここで自動生成されているコードは「イベントプロシージャ」と呼ばれるもので、イベントが発生したときはここに書いてあるプログラムが作動するしかけになっています。イベントプロシージャのことを「イベントハンドラ」と呼ぶ場合もあります。

イベントプロシーが実行される仕組み

■画像4:イベントプロシーが実行される仕組み

イベントといってもいろいろありますが、この場合はButton1をクリックした時に発生するClickイベントを指します。

よく見ると、画面にもこのプロシージャがButton1Clickイベントプロシージャであることを示す表示が出ています。クラス名ボックスに「Button1」、メソッド名ボックスに「Click」と表示されているの を確認して下さい。

Button1のClickイベントプロシージャ

■画像5:Button1Clickイベントプロシージャ。VB.NET2003の場合の画像もあります。

メモ  -  VB.NET 2002の場合

VB.NET 2002の場合はクラス名ボックスに「Form1」、メソッド名ボックスに「Button1_Click」と表示され ます。

VBのバージョンを確認する方法


 

さて、ここに先ほどの画像を表示するプログラムを書いてください。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp")

End
Sub

■リスト3:ボタンをクリックするとフォームにC:\Windows\大草原の風.bmpを表示する。

ここでは仮に「大草原の風.bmp」という画像ファイルを指定しましたが、実行する際にはどれでも良いのでちゃんとあなたのパソコンに入っている正しい 画像ファイルの名前を指定してください。

以上で作業は完了です。これで、「ボタンがクリックされたら画像を表示する」プログラムの完成です。

実際に実行して試してみてください。

ここまでで、私が言いたかったことは

イベントが発生したときはそのイベントのイベントプロシージャが実行される。

ということです。

この例にあてはめて言うと、『ボタンがクリックされたときはそのボタンのClickイベントプロシージャが実行される。』ということです。

発展学習

発展学習では意欲的な方のために現段階では特に理解する必要はない項目を解説します。

イベントプロシージャであるための条件はHandles句がついていることです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

たとえば、このClickイベントプロシージャの最後にはHandles Button1.Clickとついています。この指定のためにこのプロシージャはButton1Clickイベントプロシージャになっているのです。

試しにHandles Button1.Clickを削除してみると、もうこのプロシージャはイベントプロシージャではなくなります。またつければイベントプロシージャになります。

 

3.フォームのClickイベント

 

こういったことは「習うより慣れろ」です。どんどんいろんなイベントを使ってみましょう。

手始めに今度はフォームがクリックされたときに画像が表示されるようにしましょう。フォームがクリックされた時はフォームのClickイベントが発生します。

デザイン画面でフォームをダブルクリックしてみましょう。今度は次のようなコード(プログラム)が自動生成されます。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

■リスト4:フォームのLoadイベントプロシージャ

ここで画面を確認すると、クラス名ボックスには「(Form1 イベント)」、メソッド名ボックスには「Load」と表示されています。

FormのLoadイベントプロシージャ

■画像6:FormLoadイベントプロシージャ

メモ  -  VB.NET2003, VB.NET 2002の場合

VB.NET 2003の場合はクラス名ボックスに「(Form1 Events)」、メソッド名ボックスに「Load」と表示されます。
VB.NET 2002の場合はクラス名ボックスに「Form1」、メソッド名ボックスに「Form1_Load」と表示されます。

VBのバージョンを確認する方法


クラス名ボックスの表示はボタンの場合はそのまま「Button1」となっていましたが、フォームの場合は「Form1」となるわけではありません。フォームの場合だけ表示が特殊なのです。このことはちょっとだけ頭に入れておきてください。

ここではそれよりも、メソッド名ボックスに「Load」と表示されている方が気になります。じつはこの場所はClickイベントプロシージャではなくLoadイベントプロシージャなのです。

何かをダブルクリックしてイベントプロシージャを自動生成した場合いつも必ずClickイベントプロシージャが自動で生成されるわけではないので注意してください。

何が自動生成されるかはコントロールの種類のよって決まっています。ボタンの場合はClickイベントプロシージャ、フォームの場合はLoadイベントプロシージャです。そのコントロールで一番使いそうなイベントのイベントプロシージャが生成されるようになっています。

では、この状態からフォームのClickイベントプロシージャを作り出してみましょう。

手順は簡単です。クラス名ボックスに「(Form1 イベント)」と表示されている状態で、メソッド名ボックスの一覧の中から「Click」を選んでください。これだけでClickイベントプロシージャが生成されます。

メソッド名ボックスからClickを選択する

■画像7:メソッド名ボックスからClickを選択する。

メモ  -  VB.NET 2002の場合

VB.NET 2002の場合は、クラス名ボックスから「(Base Class Events)」を選択してから、メソッド名ボックスを変更してください。

VBのバージョンを確認する方法


 

FormのClickイベントプロシージャを作成

■画像8:FormClickイベントプロシージャを作成

あとはここにプログラムを追加するだけです。次のようになります。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click

    Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp")

End
Sub

■リスト5:フォームをクリックするとフォームにC:\Windows\大草原の風.bmpを表示する。

さて、完成したら実行してみてください。今度はフォームをクリックしても画像が表示されるようになりましたね?

 

4.フォームのLoadイベント

 

先ほどの手順でメソッド名ボックスから「Click」を選択するときに、他にもいろいろな項目があったのが目に入ったことと思います。実はあれはすべてフォームのイベントの名前なのです。あんなにたくさんイベントがあるのです。

今度はフォームのLoadイベント (読み方:Load = ロード) を使ってみましょう。このイベントは「フォームが作られたとき」に発生します。つまりLoadイベントに書いてあるプログラムは一番最初に実行されるということです。

先ほども少しだけLoadイベントプロシージャが出てきたので、もうどうやるかはわかりますよね。

完成すると次のようなプログラムになります。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp")

End
Sub

■リスト6:一番初めにフォームにC:\Windows\大草原の風.bmpを表示する。

これで実行すると、初めから画像が表示されていることが確認できます。

 

5.その他のイベント

 

ここまでの説明で、「どこにプログラムしたらよいのか?」ということはだいたい分かっていただけたと思います。

もちろん今回登場したイベントはたくさんあるイベントのほんの一部分でしかありません。

初心者にもわかりやすい代表的なイベントをまとめてみます。

  イベント 読み方 発生するタイミング
イベント Click クリック マウスの左ボタンでクリックしたとき
イベント DoubleClick ダブルクリック マウスの左ボタンでダブルクリックしたとき
イベント TextChanged テキストチェンジド テキストの内容が変化したとき
イベント Load ロード 作成されたとき
イベント Resize リサイズ 大きさが変わったとき
イベント Closing クロージング 破棄されるとき
イベント Enter エンター フォーカスを取得したとき
イベント Leave リーブ フォーカスを失ったとき
イベント KeyPress キープレス キーボードを押したとき
イベント Tick ティック 時間が経ったとき

■表1

コントロールによって発生するイベントは違います。たとえば、フォームやボタンにはTickイベントはありません。 またVBのバージョンによっても異なる場合があります。

 

6.イベントプロシージャの生成

 

これまでの説明ではボタンやフォームをダブルクリックして自動的にイベントプロシージャを生成していました。またメソッド名ボックスを使ってイベントプロシージャを生成する方法も説明しました。

イベントプロシージャを作成する方法をまとめてみます。

 

コントロールをダブルクリックする

この場合は、コントロールごとに決まったイベントプロシージャが生成されます。ボタンの場合はClickイベント、タイマーの場合には時間の経過を示すTickイベントなど、もっとも良く使うであろうイベントが生成されます。

 

クラス名ボックスとメソッド名ボックスでコントロールとイベントを選択する

コード編集画面でクラス名ボックスとメソッド名ボックスを使用するとさまざまなイベントプロシージャを自由に作り出すことができます。たとえば、クラス名ボックスにButton1を選択し、メソッド名ボックスにEnterを選択すると、Button1Enterイベントプロシージャが自動的に生成されます。

このようにするとButton1のEnterイベントプロシージャが生成される。すでに存在する場合にはその位置にジャンプする。

■画像9:このようにするとButton1Enterイベントプロシージャが生成される。すでに存在する場合にはその位置にジャンプする。

 

プロパティウィンドウを使う

VB2005以上ならばプロパティウィンドウを使ってイベントプロシージャを生成することもできます。プロパティウィンドウには普段プロパティの一覧が並んでいますが、イベントアイコンをクリックするとイベントの一覧を表示することもできます。

次の画像はデザイン画面でButton1を選択している状態で、プロパティウィンドウのイベントアイコンをクリックしたものです。

プロパティウィンドウでイベントの一覧を表示

■画像10:プロパティウィンドウでイベントの一覧を表示

Clickのところには「Button1_Click」と表示されており、既にプログラム中にButton1Clickイベントプロシージャが存在していることがわかります。この一覧では項目をダブルクリックするとその項目のイベントプロシージャが自動的に生成されます。

たとえば、一覧の中からLeaveを探してダブルクリックしてみてください。次のようなLeaveイベントプロシージャが生成されます。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Button1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Leave

End
Sub

■リスト7:ボタンのLeaveイベントプロシージャ

 

自分で書く

自動的にイベントプロシージャを作り出すのではなく自分で書くこともできます。少しでも間違えるとイベントプロシージャとして認識されなかったり、エラーが発生したりするので自分で書く場合は十分に注意して下さい。プログラムの勉強以外の目的で自分でイベントプロシージャを書く必要はありません。

 

7.練習

 

それでは、ここで1つ練習しておきましょう。

次の仕様のプログラムを作ってみます。

仕様

1.テキストボックス(TextBox)とピクチャーボックス(PictureBox)が1つずつある。

2.テキストボックスに画像ファイルの名前を入力して、Enterキーを押すとピクチャーボックスにその画像が表示される。

順をおってついてきてくださいね。

手順1.新しいプロジェクトを作成する。

手順2.テキストボックスとピクチャーボックスを配置する。

VB2005 対応 VB.NET 2002 対応 VB.NET 2003 対応
代表的なコントロール 代表的なコントロール
■画像11 ■画像12

配置の仕方はボタンと同じです。

テキストボックスとピクチャーボックスを配置したところ

■画像13:テキストボックスとピクチャーボックスを配置したところ。わかりにくが、真ん中に大きくピクチャーボックスを貼り付けてある。

手順3.テキストボックスのKeyPressイベントプロシージャを作成する。

テキストボックスをダブルクリックすると自動的にTextChangedイベントプロシージャが作成され ます。その後で自分でメソッド名ボックスからKeyPressイベント選択して、KeyPressイベントプロシージャを作成します。

メモ  -  VB.NET 2002の場合

VB.NET 2002の場合は、クラス名ボックスで「TextBox1」を選択してから、メソッド名ボックスを変更してください。

 

KeyPressイベントプロシージャを作成したところ

■画像14:KeyPressイベントプロシージャを作成したところ

 

手順4.テキストボックスのKeyPressイベントプロシージャにプログラムする。

次のようにプログラムしてください。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

    On
Error Resume
Next

   
If e.KeyChar = Chr(Keys.Enter) Then
       
PictureBox1.BackgroundImage = Image.FromFile(TextBox1.Text)
    End
If

End Sub

■リスト8

今回はじめて出てくる構文やキーワードがいくつもあります。現段階では覚える必要はありませんが、一応簡単に説明しておきます。

On Error Resume Nextは「エラーがあっても無視しなさい。」という意味です。テキストボックスにでたらめな文字を入れてEnterキーが押されたらエラーになってしまうのでその予防のためのものです。

If e.KeyChar = Chr(Keys.Enter) Thenは「もし、押されたキーがEnterだったら…」という意味です。KeyPressイベントはEnterキー以外のものが押されても発生するので、プログラムの中でこのように条件をつけています。

 

手順5.完成

完成したら実行して、テストしてみましょう。テキストボックスに画像ファイルのフルパスを書いてEnterキーを押してください。見事画像が表示されたら成功です。

完成

■画像15:完成

 

7.最後に

 

今回の説明でわかったように、VBではイベントプロシージャにプログラムを書きます。そしてほとんどの場合イベントが発生しない限りプログラムは動きません。このような仕組みを「イベントドリブン」と呼びます。

このように書くとリアルタイムで動くプログラム、たとえばアクションゲームなどはVBでは作れないような気がしてしまいますが、そんなことはありません。VBでもちゃんとリアルタイムに動くプログラムもかけるので安心してください。

なお、VB以外でもC#やC++ ,Javaなどはすべて実質的に「イベントドリブン」です。特にC#などはこの点はVBと全く同じです。

このようにイベントの仕組みはVBだけだはなくもっと広い視野で基本的な仕組みとなっています。