Forms.AddでロードさせるとクラスでLoadが実行されない

解決


唯香  2007-08-24 20:55:36  No: 99363

いつもこちらで勉強させていただいています。
ここ最近ずっと頭を悩ませている問題があり投稿させていただきます。

現在以下のような処理でフォームをロードさせています。

Dim MyForm    As Form
Dim frmCustom As New cls001

Select Case Index
    Case 1: Set MyForm = New frm001
    Case 2: Set MyForm = New frm002
'    〜〜〜省略〜〜〜
End Select
Set frmCustom.frmCustom = MyForm
Load MyForm
MyForm.Show vbModal, Me

cls001クラスモジュールには
frmCustom_Loadという処理が存在するので
実行するとfrm001_Load→frmCustom_Load→フォームを表示となります。

これではフォームが増えたときにメンテが必要なので
以下のように処理内容を変更しました。

Dim MyForm    As Form
Dim frmCustom As New cls001
Dim strFrmNo  As String

strFrmNo = Format(Index, "000")

Set MyForm = Forms.Add("frm" & frmNo)
Set frmCustom.frmCustom = MyForm
Load MyForm
MyForm.Show vbModal, Me

するとfrmCustom_Loadが実行されなくなってしまいました。
調べてみると↓
> Add メソッドで生成したときは、Load ステートメントは不要です。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200708/07080020.txt
とのことでした。

つまりクラスモジュールのロードイベントを実行させる場合には
Forms.Addは使えないということでしょうか?

長くなりましたが何かご存知の方はご教授よろしくお願いします。

[開発環境] VB6 / XPpro


魔界の仮面弁士  2007-08-26 12:04:53  No: 99364

> つまりクラスモジュールのロードイベントを実行させる場合には
> Forms.Addは使えないということでしょうか?
フォームモジュールであれば、Load イベントが存在しますが、
そもそもクラスモジュールにはLoad イベントが存在しません。

クラスモジュールに Load イベントを実装したわけでも無さそうなので、
クラス側で、Form の Load イベントを捕らえているということでしょうか。

もしそうなら、Forms.Add を呼び出した時点で、フォームの Load が
完了する仕様なので、それを考慮したコーディングに修正する必要があるかと。


唯香  2007-08-27 22:43:55  No: 99365

魔界の仮面弁士様ご回答ありがとうございます。

> クラスモジュールに Load イベントを実装したわけでも無さそうなので、
> クラス側で、Form の Load イベントを捕らえているということでしょうか。
その通りです。
説明不足で混乱させてしまい申し訳ありません。

> もしそうなら、Forms.Add を呼び出した時点で、フォームの Load が
> 完了する仕様なので、それを考慮したコーディングに修正する必要があるかと。
わかりました。
Forms.Addの仕様なので仕方ないですね。

また1つ勉強させていただきました。
魔界の仮面弁士様ご教授いただきありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加