標準モジュールからフォーム上のコントロールのアクセスするには?

解決


MilkTea  2006-03-10 19:55:18  No: 130592

いつも勉強させていただいています。早速ですが質問させていただきます。

フォーム上に表示用のリストビュー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でした。
よろしくお願い致します。


matsu  2006-03-10 20:16:32  No: 130593

>関数ShowData()を走らせたくないのですが、こういう場合はどう処理すればいいでしょうか?
>標準モジュールにGetFileByFTPを移動させようとしたのですが、今度はInetコントロールが使えなくなってしまい、NGでした。
>よろしくお願い致します。

フォームがロードされていなくても、Inetコントロールにアクセスしようとするとフォームがロードされるので、
ShowDataをForm_Load()で呼ばないように変更して、引数でShowDataを実行するか判断されてはどうですか?


MilkTea  2006-03-10 20:33:10  No: 130594

matsuさん、ありがとうございます。
やはり、
Private Sub Form_Load()
    if Command = 1 Then
        Call ShowData
    End If
End Sub
とするしかないでしょうか。


123  2006-03-10 21:14:33  No: 130595

他にもやり方はいろいろありますよ。
たとえば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


MilkTea  2006-03-10 23:03:54  No: 130596

123さん、ありがとうございます。
私が勘違いしていました。

Form1に配置されたInetにアクセスしようとすると、Form1のForm_Loadが
走るので、123さんが言われているように、呼び出し側で

①Frm1.ShowData
②Frm1.Show

とすると、①の時点でForm_Loadが走ってしまうのかなと思いこんでました。
コントロールにアクセスするときはForm_Loadが走っても、関数にアクセス
するときは走らないんですね…。知りませんでした。
教えていただき、ありがとうございました。


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

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






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