| Visual Basic 入門講座 |
|
|
Visual Basic 中学校 > 入門講座 >
第4回 イベントを逃すな
この記事が対象とする製品・バージョン (バージョンの確認方法)
|
|
◎ | 対象です。 |
|
|
○ | 対象ですが一部画面が異なる場合があります。 |
|
|
○ | 対象ですが一部画面が異なる場合があります。 |
|
|
× | 対象外です。 |
入門講座の第4回では「イベント」について説明します。前回の「プロパティ」と今回の「イベント」の概要が分かれば、あともう少しで最低限必要な知識はそろいます。がんばって習得してください。
| 概要 ・イベントが発生すると自動的にイベントプロシージャが実行される ・イベントプロシージャの作り方 ・画像ファイルを表示させる |
たとえば、画像を表示するプログラムを作りたいと思ったとして、画像を表示させる方法はインターネット等で検索すればすぐ分かります。多分次のようなコード(プログラム)を発見することでしょう。
Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp") |
■リスト1
Me (Me = ミー)はこの場合はフォームのことです。BackgroundImage(読み方:BackgroudImage = バックグラウンドイメージ)は 前回も登場しましたが背景画像をあらわすプロパティです。前回はプロパティウィンドウからプロパティを設定する方法を説明しましたが、このように . と = を使うことでプログラムからプロパティを設定することができます。(今回はこういったことを理解していなくても大丈夫です)
でも、このプログラムを一体どこに書けばよいのでしょうか?
「イベント」をよく理解すればこういった問題で悩むことはあまりなくなります。ともあれ、これを読んでいる方はまだイベントについて何も知らないはずなので、丁寧に順をおって説明しましょう。
問題は「画像をいつ、どのタイミングで表示したいか?」ということです。
フォームが表示されたときはじめから画像を表示したいのか、それとも、ボタンが押されたときに表示したいのか、それともフォームをクリックしたら表示するのか…などなどです。
このようなタイミングのことをVBでは「イベント」といいます。
この例で行くと「フォームが表示された」、「ボタンが押された」、「フォームをクリックした」などがイベントです。そしてイベントごとにプログラムを書く場所はある程度限定されます。
では、そろそろ具体的にプログラムしてみましょう。まずはボタンが押されたときに画像が表示されるようにしましょう。
「ボタンが押された」というイベントはClickイベント (読み方:Click = クリック)と呼びます。
まず、新規プロジェクトを作成してください。新しいプロジェクトの作成方法を忘れてしまった方はこちらをご覧下さい。

■画像1:新しいプロジェクトを作成した直後
そしてフォームにボタンを1つ貼り付けてください。

■画像2:ボタンを貼り付けた状態
このボタンがクリックされたらフォームに画像を表示することにします。
まずはボタンをダブルクリックしてください。そうすると、コード編集画面に切り替わります。
ここではボタンをダブルクリックするという手順がとても重要です。デザイン画面とコード編集画面を切り替えるだけならアイコンを使っても行うことができます。
![]()
■画像3:コード編集画面とデザイン画面の切り替え
ボタンをダブルクリックしてコード編集画面に切り替えると自動的に次のコード(プログラム)が生成されるのです。
| Private
Sub Button1_Click(ByVal sender
As System.Object, ByVal
e As System.EventArgs)
Handles Button1.Click End Sub |
■リスト2:ボタンのClickイベントプロシージャ
アイコンを画面を切り替えた場合はコードが自動生成されませんが、またデザイン画面に戻ってボタンをダブルクリックするとコードを自動生成することができます。また、自動生成しないで自分でキーボードから同じコードを入力しても構いません。
ここで自動生成されているコードは「イベントプロシージャ」と呼ばれるもので、イベントが発生したときはここに書いてあるプログラムが作動するしかけになっています。イベントプロシージャのことを「イベントハンドラ」と呼ぶ場合もあります。

■画像4:イベントプロシーが実行される仕組み
イベントといってもいろいろありますが、この場合はButton1をクリックした時に発生するClickイベントを指します。
よく見ると、画面にもこのプロシージャがButton1のClickイベントプロシージャであることを示す表示が出ています。クラス名ボックスに「Button1」、メソッド名ボックスに「Click」と表示されているの を確認して下さい。

■画像5:Button1のClickイベントプロシージャ。VB.NET2003の場合の画像もあります。
| メモ - VB.NET 2002の場合 VB.NET 2002の場合はクラス名ボックスに「Form1」、メソッド名ボックスに「Button1_Click」と表示され ます。 |
さて、ここに先ほどの画像を表示するプログラムを書いてください。
| 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とついています。この指定のためにこのプロシージャはButton1のClickイベントプロシージャになっているのです。 試しにHandles Button1.Clickを削除してみると、もうこのプロシージャはイベントプロシージャではなくなります。またつければイベントプロシージャになります。 |
こういったことは「習うより慣れろ」です。どんどんいろんなイベントを使ってみましょう。
手始めに今度はフォームがクリックされたときに画像が表示されるようにしましょう。フォームがクリックされた時はフォームのClickイベントが発生します。
デザイン画面でフォームをダブルクリックしてみましょう。今度は次のようなコード(プログラム)が自動生成されます。
| Private
Sub Form1_Load(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles MyBase.Load End Sub |
■リスト4:フォームのLoadイベントプロシージャ
ここで画面を確認すると、クラス名ボックスには「(Form1 イベント)」、メソッド名ボックスには「Load」と表示されています。

■画像6:FormのLoadイベントプロシージャ
| メモ - VB.NET2003,
VB.NET 2002の場合 VB.NET 2003の場合はクラス名ボックスに「(Form1
Events)」、メソッド名ボックスに「Load」と表示されます。 |
クラス名ボックスの表示はボタンの場合はそのまま「Button1」となっていましたが、フォームの場合は「Form1」となるわけではありません。フォームの場合だけ表示が特殊なのです。このことはちょっとだけ頭に入れておきてください。
ここではそれよりも、メソッド名ボックスに「Load」と表示されている方が気になります。じつはこの場所はClickイベントプロシージャではなくLoadイベントプロシージャなのです。
何かをダブルクリックしてイベントプロシージャを自動生成した場合いつも必ずClickイベントプロシージャが自動で生成されるわけではないので注意してください。
何が自動生成されるかはコントロールの種類のよって決まっています。ボタンの場合はClickイベントプロシージャ、フォームの場合はLoadイベントプロシージャです。そのコントロールで一番使いそうなイベントのイベントプロシージャが生成されるようになっています。
では、この状態からフォームのClickイベントプロシージャを作り出してみましょう。
手順は簡単です。クラス名ボックスに「(Form1 イベント)」と表示されている状態で、メソッド名ボックスの一覧の中から「Click」を選んでください。これだけでClickイベントプロシージャが生成されます。

■画像7:メソッド名ボックスからClickを選択する。
| メモ - VB.NET 2002の場合 VB.NET 2002の場合は、クラス名ボックスから「(Base Class Events)」を選択してから、メソッド名ボックスを変更してください。 |

■画像8:FormのClickイベントプロシージャを作成
あとはここにプログラムを追加するだけです。次のようになります。
| 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を表示する。
さて、完成したら実行してみてください。今度はフォームをクリックしても画像が表示されるようになりましたね?
先ほどの手順でメソッド名ボックスから「Click」を選択するときに、他にもいろいろな項目があったのが目に入ったことと思います。実はあれはすべてフォームのイベントの名前なのです。あんなにたくさんイベントがあるのです。
今度はフォームのLoadイベント (読み方:Load = ロード) を使ってみましょう。このイベントは「フォームが作られたとき」に発生します。つまりLoadイベントに書いてあるプログラムは一番最初に実行されるということです。
先ほども少しだけLoadイベントプロシージャが出てきたので、もうどうやるかはわかりますよね。
完成すると次のようなプログラムになります。
| 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を表示する。
これで実行すると、初めから画像が表示されていることが確認できます。
ここまでの説明で、「どこにプログラムしたらよいのか?」ということはだいたい分かっていただけたと思います。
もちろん今回登場したイベントはたくさんあるイベントのほんの一部分でしかありません。
初心者にもわかりやすい代表的なイベントをまとめてみます。
| イベント | 読み方 | 発生するタイミング | |
|
|
Click | クリック | マウスの左ボタンでクリックしたとき |
|
|
DoubleClick | ダブルクリック | マウスの左ボタンでダブルクリックしたとき |
|
|
TextChanged | テキストチェンジド | テキストの内容が変化したとき |
|
|
Load | ロード | 作成されたとき |
|
|
Resize | リサイズ | 大きさが変わったとき |
|
|
Closing | クロージング | 破棄されるとき |
|
|
Enter | エンター | フォーカスを取得したとき |
|
|
Leave | リーブ | フォーカスを失ったとき |
|
|
KeyPress | キープレス | キーボードを押したとき |
|
|
Tick | ティック | 時間が経ったとき |
■表1
コントロールによって発生するイベントは違います。たとえば、フォームやボタンにはTickイベントはありません。 またVBのバージョンによっても異なる場合があります。
これまでの説明ではボタンやフォームをダブルクリックして自動的にイベントプロシージャを生成していました。またメソッド名ボックスを使ってイベントプロシージャを生成する方法も説明しました。
イベントプロシージャを作成する方法をまとめてみます。
この場合は、コントロールごとに決まったイベントプロシージャが生成されます。ボタンの場合はClickイベント、タイマーの場合には時間の経過を示すTickイベントなど、もっとも良く使うであろうイベントが生成されます。
コード編集画面でクラス名ボックスとメソッド名ボックスを使用するとさまざまなイベントプロシージャを自由に作り出すことができます。たとえば、クラス名ボックスにButton1を選択し、メソッド名ボックスにEnterを選択すると、Button1のEnterイベントプロシージャが自動的に生成されます。
![]()
■画像9:このようにするとButton1のEnterイベントプロシージャが生成される。すでに存在する場合にはその位置にジャンプする。
VB2005以上ならばプロパティウィンドウを使ってイベントプロシージャを生成することもできます。プロパティウィンドウには普段プロパティの一覧が並んでいますが、イベントアイコンをクリックするとイベントの一覧を表示することもできます。
次の画像はデザイン画面でButton1を選択している状態で、プロパティウィンドウのイベントアイコンをクリックしたものです。

■画像10:プロパティウィンドウでイベントの一覧を表示
Clickのところには「Button1_Click」と表示されており、既にプログラム中にButton1のClickイベントプロシージャが存在していることがわかります。この一覧では項目をダブルクリックするとその項目のイベントプロシージャが自動的に生成されます。
たとえば、一覧の中からLeaveを探してダブルクリックしてみてください。次のようなLeaveイベントプロシージャが生成されます。
| Private
Sub Button1_Leave(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles Button1.Leave End Sub |
■リスト7:ボタンのLeaveイベントプロシージャ
自動的にイベントプロシージャを作り出すのではなく自分で書くこともできます。少しでも間違えるとイベントプロシージャとして認識されなかったり、エラーが発生したりするので自分で書く場合は十分に注意して下さい。プログラムの勉強以外の目的で自分でイベントプロシージャを書く必要はありません。
それでは、ここで1つ練習しておきましょう。
次の仕様のプログラムを作ってみます。
| 仕様 1.テキストボックス(TextBox)とピクチャーボックス(PictureBox)が1つずつある。 2.テキストボックスに画像ファイルの名前を入力して、Enterキーを押すとピクチャーボックスにその画像が表示される。 |
順をおってついてきてくださいね。
|
|
|
![]() |
![]() |
| ■画像11 | ■画像12 |
配置の仕方はボタンと同じです。

■画像13:テキストボックスとピクチャーボックスを配置したところ。わかりにくが、真ん中に大きくピクチャーボックスを貼り付けてある。
テキストボックスをダブルクリックすると自動的にTextChangedイベントプロシージャが作成され ます。その後で自分でメソッド名ボックスからKeyPressイベント選択して、KeyPressイベントプロシージャを作成します。
| メモ - VB.NET 2002の場合 VB.NET 2002の場合は、クラス名ボックスで「TextBox1」を選択してから、メソッド名ボックスを変更してください。 |

■画像14:KeyPressイベントプロシージャを作成したところ
次のようにプログラムしてください。
| 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キー以外のものが押されても発生するので、プログラムの中でこのように条件をつけています。
完成したら実行して、テストしてみましょう。テキストボックスに画像ファイルのフルパスを書いてEnterキーを押してください。見事画像が表示されたら成功です。

■画像15:完成
今回の説明でわかったように、VBではイベントプロシージャにプログラムを書きます。そしてほとんどの場合イベントが発生しない限りプログラムは動きません。このような仕組みを「イベントドリブン」と呼びます。
このように書くとリアルタイムで動くプログラム、たとえばアクションゲームなどはVBでは作れないような気がしてしまいますが、そんなことはありません。VBでもちゃんとリアルタイムに動くプログラムもかけるので安心してください。
なお、VB以外でもC#やC++ ,Javaなどはすべて実質的に「イベントドリブン」です。特にC#などはこの点はVBと全く同じです。
このようにイベントの仕組みはVBだけだはなくもっと広い視野で基本的な仕組みとなっています。