[VB6] OnShowイベントの作成

VB6のではフォームを開いた瞬間を捕らえるイベントが無い。
Form_OnLoadがあるじゃ無いかと言うかもしれませんがアレは違う。

VB6でフォームを呼び出す、閉じるにはいくつかの段階がある。
1、フォームをメモリーに読み込む。
2、フォームの値を操作する。
3、フォームをディスプレイ上に表示する。
4、フォームをディスプレイ上から隠す。
5、フォームをメモリーから消す。
6、プログラムを終了する。

これらを正確にコードで書くと

Dim frmTmp As Form
Set frmTmp= Form1           '・・・・1
frmTmp.Caption = "てすと中" '・・・・2
Call frmTmp.Show            '・・・・3
Call frmTmp.Hide            '・・・・4
Call Unload(Form1)          '・・・・5


となる。

Form_Onloadイベントは 2の時に走るものであって、ディスプレイの表示された瞬間(Show実行時)に走るものではない。
ちなみにForm_Initialize は1の時、
Form_QueryUnload、Form_Unloadは4の時に走り、Form_QueryUnloadの方が先。
Form_Terminate は、プログラム終了時に呼び出される。

プログラムをしているとどうしても3の時、つまりShowの瞬間に呼び出したい関数と言うものがでてくる。
こうした場合には下記の方法を提案する。

まずフォームの対し、PrivateなBool値を用意する。(仮にBlnFlg1とする)
そして、Onloadイベント時に BlnFlg1 をFalseに設定する処理を書き、
Form_Resizeイベントの先頭に下記のコードを追加する。

If Not(BlnFlg1) Then
  BlnFlg1 = True
  Call 呼び出したい関数
End If

Call 呼び出したい関数 の個所は各々好きなように変更する。
関数でなくとも処理を直接書いてもよい。

Show実行時に必ずForm_Resizeイベントが実行されるのを利用した技だ。
使ってみると案外使いやすいので是非お勧めしたい。

Posted by namahage