いつもこちらで勉強させていただいています。
ここ最近ずっと頭を悩ませている問題があり投稿させていただきます。
現在以下のような処理でフォームをロードさせています。
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
> つまりクラスモジュールのロードイベントを実行させる場合には
> Forms.Addは使えないということでしょうか?
フォームモジュールであれば、Load イベントが存在しますが、
そもそもクラスモジュールにはLoad イベントが存在しません。
クラスモジュールに Load イベントを実装したわけでも無さそうなので、
クラス側で、Form の Load イベントを捕らえているということでしょうか。
もしそうなら、Forms.Add を呼び出した時点で、フォームの Load が
完了する仕様なので、それを考慮したコーディングに修正する必要があるかと。
魔界の仮面弁士様ご回答ありがとうございます。
> クラスモジュールに Load イベントを実装したわけでも無さそうなので、
> クラス側で、Form の Load イベントを捕らえているということでしょうか。
その通りです。
説明不足で混乱させてしまい申し訳ありません。
> もしそうなら、Forms.Add を呼び出した時点で、フォームの Load が
> 完了する仕様なので、それを考慮したコーディングに修正する必要があるかと。
わかりました。
Forms.Addの仕様なので仕方ないですね。
また1つ勉強させていただきました。
魔界の仮面弁士様ご教授いただきありがとうございました。
ツイート | ![]() |