2ー5.さあ君はもうVB.NETプログラマ!
2−4までの内容を習得した君は、もう立派なVB.NETプログラマです。
あとは、グーグル先生を頼りに、自力でスキルアップしていけるでしょう・・。
ちょびっとだけ理解を深めるために、今作ったソリューションをいじってみましょう。
@ソリューションを閉じてしまっていたら、再度SharpDevelopで開きましょう。
ソリューションは何処??思い出しましょう・・・。
ドキュメント→SharpDevelop
Projectsの中のHello Worldフォルダ
でしたね。
その中にある 〜.sln ファイルを開きましょう。
Sharp
Developアプリを開いても最近使用したソリューション簡単に開けますけどね・・。
AMainForm.vbのソースを開きます。タブにMainForm.vbが出てれば、そのタブに移るだけ。
もし、いなかったら プロジェクトウィンドウの中のツリーの
MainForm.vb をダブルクリックしましょう。
B赤枠の Sub Buton1Click 〜 行 と End
Sub 行は、デザイン時にボタンをダブルクリックしたら
自動生成され、さらにその中に自分で Msgbox
行を書きました。
でも、
なぜアプリで ”ほぁた!”ボタンをクリックしたら、この関数が呼ばれたのでしょうか・・・?
関数名がButton1Click
だからでしょうか?? 答えはNoです。
試しに、赤枠の3行を全て消してデバッグ実行してみましょう。
Cデバッグ実行??え忘れた?これですよ、これ
Dエラーが出ました。なにやら今度は、最初にデバッグ実行した時と違うエラーです。
Button1Clickは〜メンバではありません・・。 エラーウィンドウのエラーの行をクリック
してみましょう。
EMainForm.Designer.vb タブが自動的に開き、エラーの存在している行に赤波線
が出ています。
このMainFormDesigner.vbは、MainForm.vb と似ていますが、デザイナを操作した時に自動生成される
プログラムのうち、ユーザーが触らなくてもよい部分のプログラムがこちらのファイルに自動的に書かれます。
F AddHandler Me.button1.click,AddressOf Me.Button1Click
初めての人には意味不明な一行なのだが・・・
何を隠そう、ボタンをクリックしたときにButton1Click関数が呼ばれたからくりの答えが
この一行なのである。
AddHandler は イベント と 関数 を結びつける指令。
”Me.button1.Click” というイベントに ”Me.Button1Click”という関数を紐付けている。
先ほど赤枠の関数を消し去ったので、そんな関数ないと怒られているのが今の状況だ・・。
ならば、エラーを出したこの1行を消して実行してみよう
。
G今度は実行できたはずだ。
だが、”ほぁた!”ボタンを押しても、何も起きない。そう・・・、Button1Click関数はもういないのだ・・。
なんだか、悲しい・・。
H元の状態に戻すため、先ほど消した3行を書き直してみるが、
今度は2−3でボタンをダブルクリックしたのとは違う方法で関数を準備することにしよう。
MainForm.vbタブのデザインタブで、
2−3の時と同じようにbuttonを選択状態にしよう。
I今度はダブルクリックするのではなく、右下のプロパティウィンドウに今選択している
button1のプロパティが表示されているが、その中の雷マーク
を押そう。
これ↓
Jすると、button が持っているイベントの一覧が表示
されているので、
その中から、”Click”を探し、その右側の欄をダブルクリックしてみよう。
Kすると2−3でボタンをダブルクリックしたときと同じ Sub Button1Click 〜 End Sub
が用意されただろう。
2−3の時との違いは、今回は明確に”Click”イベント を明確に選んだ
ことだ。
もし、Jのステップで他のイベントを選び、ダブルクリックしていなたらば、違うイベントに対する
プログラムを書くことになる。もう一度Iのステップに戻り、イベント一覧を見てみると・・
マウス操作にまつわるイベントだけでも、下記のようにいっぱいある。
ClickイベントはマウスボタンをDownしてUpしたときに発生するが、そもそもDownだけ、Upだけでも
発生するイベントはあるし、ボタン上でカーソルを移動させるとMoveイベント、さらにボタン上から
カーソルが出ていくときにはLeaveが発生する。例えばClickではなくUpにプログラムを書いておくと、
ユーザーがボタンを押したものの、間違いに気づいてButtonからカーソルを外した位置でボタンを
離した場合、Button上ではないのでUpイベントは起きず、実行を阻止できる。
Lなぜ2−3でbuttonをダブルクリックしたらばClickイベントに対する関数が用意されたのかというと・・
部品毎に”規定のイベント”
というものがあって、例えばButtonで一番よく使うのはClickでしょ?だからである。
buttonではなくフォームをダブルクリックするとLoadイベント(初めてフォームが表示されるときに発生する)だし、
CheckboxならばCheckedChangeイベント・・という風に。
開発環境は賢いので、部品をダブルクリックした瞬間に、
〜.designer.vb に
Addhandler句を追加して(Eで説明したやつ)、さらに空の関数の器を準備してくれるのである。
そして、このようにイベントと紐付いている関数を”イベントハンドラ”という。
関数は時と場合によって色々な呼び方をするのであまり悩まないように・・
【まとめ】
今まで2−1〜2−4で行ってきたWindowsのプログラムであるが、どんなWindowsプログラムを書くにせよ・・
その大まかな流れは
@フォーム に オブジェクトを配置してデザイン
(今回の例ではボタン)
A発生するイベントによって呼び出される関数の中身を書く
(今回の例はclickイベントに対する関数)
である。
【最後に”クラス”について】
今回、はっきりとした説明を避けた”クラス”
だが、実はFormやButtonも”クラス”で、それを
具体的に配置した”button1”は、”オブジェクト”または”インスタンス”
と呼ぶ。
昔々、コンピュータ上で扱える変数の種類は整数、実数(浮動小数)、文字、文字列・・単純な”型”であった。
原子や分子のようなものであろう。
しばらくして、複数の種類型をまとめて扱いたくなり、”構造体”
が生まれた。
例えば、”人構造体”は名前という”文字列情報”と年齢という”整数情報”の両方を持つ・・と。
生命でいえばゾウリムシやクロレラといった単細胞生物レベルであろう・・。
そして、さらに
プログラムの世界では”型”は進化していき、内部に関数を持つようになったり、
外からの操作に対して、内部的に状態が自動的に変化したり、イベントを発生するようになったりした・・
。
犬のように、年齢や空腹度、主人に対する忠誠度があり、餌をあげれば空腹度は回復し、
空腹度は時刻とともに勝手に減少し、あるレベルになると”くぅ〜ん”となくイベントが発生し・・
このように高度に発達した”型”が”クラス”
である。
そして、犬クラスの実態が”ポチ”であり”タロウ”であったりする。
賢者が残した財産のクラス群が .net framework
であり、その機能を学んでいけば、
あなたのプログラムを強力にサポートすることでしょう・・。
テキストファイルとの入出力を行いたい?ファイル操作をしたい?
フォームに好きな図形を書きたい?計算したい?・・・etc
そのような機能は、全て.net
frameworkに標準に備わっている機能であり、
あなたが書くプログラムは0からではなく、ご主人様のように、そのクラスの
実態を宣言し、命令する感覚なのです。
最近の漫画でいえば ”出てこい俺の友達、ジバニャン!!”・・
さあ、色々なモンスター(.net標準クラス)を使ってみましょう!
<<目次に戻る>>
<<前 2-4 へ>>