フォームが表示された後に一度だけ処理をしたい

解決


kk  2006-06-10 18:53:37  No: 131796

環境はVB6です。

フォームがあり、このフォームはモーダル状態で開かれています。

フォームロードに時間が掛かる処理を書いていて、フォームが表示されるまでに
時間が掛かります。その為、先にフォームを表示させてお待ちくださいなどの
メッセージを書いたフレームなどを中央におこうと考えています。

今まではフォームロードのはじめのほうにMe.Showなど書いて先に表示させてましたが、
このフォームはモーダル状態で開かれているためできません。

なので、フォームが表示された後に一度だけ処理をしたいのですがこういった場合
はどのイベントに記述するのが適当でしょうか?

よろしくお願いします。


通ってみた  2006-06-10 21:29:00  No: 131797

1:「時間が掛かる処理」というものをForm_Loadに書かないで他に書く
2:Timerを仕掛けて1を処理させる
3:Timerが作動したら、TimerのEnabled=Falseにする

とか?
これならフォームは表示されるはず


kk  2006-06-10 22:09:55  No: 131798

ありがとうございます。
Timerコントロールを使えば可能ですがもっとスマートに出来る方法はないでしょうか?
よろしくお願いします。


通ってみた  2006-06-12 05:00:34  No: 131799

どんなコードが貴方の言う「スマート」なのか教えてください


Hoge  2006-06-12 08:55:58  No: 131800

ダイアログのフォームのActiveイベントに

Private Sub Form_Activate()
  Me.Refresh

  '長い処理

End Sub

とか

長い処理を行うときフォームが表示されて無応答になると
アプリケーションがハングしたのかと勘違いするので
DoEventsとかをいれてプログレスバー等で進捗状況を表示する方が
良いでしょう。


つかいっぱしり  2006-06-12 18:27:11  No: 131801

スマートには
・コード(プログラム)がスマートな場合
・動作(仕様)がスマートな場合

2種類あり、
後者の場合、スマートな仕様を実装する為には多少
コードの方はがんばらないとね。


kk  2006-06-12 19:47:28  No: 131802

>どんなコードが貴方の言う「スマート」なのか教えてください
Hogeさんのような感じ

Hogeさん  ありがとうございます。

Form_Activate()に処理を書くようにしました。
ここに処理を書くと何回も実行されてしまうので、Form_Load()の最後にフラグを
立てて処理するようにして、うまくいきました。

ありがとうございました。


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

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






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