いつも勉強させていただいています。早速ですが質問させていただきます。
フォーム上に表示用のリストビューListView1とFTPを使うためのInetコントロールInet1、ボタン押下によりFTPでファイルを
ダウンロードするためのコマンドボタンCommand1を配置して、Form_Load時にあるデータをリストビューに表示する関数ShowData()と
FTPファイル取得用関数GetFileByFTP()をフォームForm1に作成しました。
起動時のコマンドライン引数の値によっては、フォームを表示せずに標準モジュールからもFTPでサーバーにあるファイルをダウン
ロードする必要があるため、
Sub Main()
Dim Frm1 As Form1
Set Frm1 = New Form1
Call Frm1.GetFileByFTP()
Set Frm1 = Nothing
End Sub
と処理したのですが、GetFileByFTP関数内のInet1にアクセスする段階で、先のForm1のForm_Load処理の
Form_Load()
Call ShowData()
End Sub
が走ってしまいます。標準モジュールのSub Main()からFTPの関数を呼ぶ場合は、フォームを表示する必要がないため、データ表示
関数ShowData()を走らせたくないのですが、こういう場合はどう処理すればいいでしょうか?
標準モジュールにGetFileByFTPを移動させようとしたのですが、今度はInetコントロールが使えなくなってしまい、NGでした。
よろしくお願い致します。
>関数ShowData()を走らせたくないのですが、こういう場合はどう処理すればいいでしょうか?
>標準モジュールにGetFileByFTPを移動させようとしたのですが、今度はInetコントロールが使えなくなってしまい、NGでした。
>よろしくお願い致します。
フォームがロードされていなくても、Inetコントロールにアクセスしようとするとフォームがロードされるので、
ShowDataをForm_Load()で呼ばないように変更して、引数でShowDataを実行するか判断されてはどうですか?
matsuさん、ありがとうございます。
やはり、
Private Sub Form_Load()
if Command = 1 Then
Call ShowData
End If
End Sub
とするしかないでしょうか。
他にもやり方はいろいろありますよ。
たとえばForm_LoadでShowDataを実行するのでなく
外部からForm1のメソッドとして実行することもできますよね
Sub Main
Dim Frm1 As Form1
Set Frm1 = New Form1
If フォームを表示する条件 Then
'フォームを表示する場合
Frm1.ShowData
Frm1.Show
Else
Frm1.GetFileByFTP()
End If
End Sub
123さん、ありがとうございます。
私が勘違いしていました。
Form1に配置されたInetにアクセスしようとすると、Form1のForm_Loadが
走るので、123さんが言われているように、呼び出し側で
①Frm1.ShowData
②Frm1.Show
とすると、①の時点でForm_Loadが走ってしまうのかなと思いこんでました。
コントロールにアクセスするときはForm_Loadが走っても、関数にアクセス
するときは走らないんですね…。知りませんでした。
教えていただき、ありがとうございました。
ツイート | ![]() |