- ベストアンサー
フォームロード時のループ
フォームロード時にDo Loopを使うとフォームが表示されません。フォームロード時には無限ループは使えないんでしょうか?できればフォームロード時に繰り返し処理をしたいんですけど何か方法があれば教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
そのような時は、標準モジュールに Sub Main を作成して プロジェクト→プロパティのスタートアップの設定を フォームからSub Main に切り替えます。 そしてSub Mainの中で、formの表示とLoop処理を行います。
その他の回答 (5)
- piyo2000
- ベストアンサー率49% (144/293)
Formロード時に時間の掛かる処理(無限ループ含む)をする場合は Me.Show '#1さんの方法では拙いです Do '... Doevents Loop とします。 これで表示されるはずです。 # Doeventsを入れないと本当に無限ループになってしまい終わらせることが出来ませんよ(^^; ですが、表示しようとしているフォームのオブジェクトと関係ない処理をしている(つまり、無限ループの処理にフォームの表示が必要なく、単にタイミング的にフォーム表示の前に行いたい)場合は、#3さんのようにMain()や他フォームからの遷移前に行います。 # 基本的にForm_Loadで時間の掛かる処理を入れるのは良くありません DoEventsを入れると、ループ間にOSからのメッセージを受け取ることが出来ますので、描画をしたりタイトルバーの×ボタンが効くようになります(ただし、×ボタンを押してもプロセスは終わりません)。 また、Do...Loopなどの無条件ループを使う場合は「必ず抜けることのできる条件を入れておく」というのが大前提です。 Doeventsを入れてなくて、テストで実行→無限ループでVBを泣く泣く終了→ソースが・・・(T_T) ということのもなりかねませんから。
- Kuppycat
- ベストアンサー率50% (109/216)
Do Loop の構文をよく読みましょう。 Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop または Do [statements] [Exit Do] [statements] Loop [{While | Until} condition] です。 While または Until 条件を設定していますか? もしくは If 条件などで、Exit Do していますか? ちゃんと設定していれば、ループを抜けて、フォームは表示されます。 今一度、プログラムを見直してください。
- ryoukun
- ベストアンサー率38% (16/42)
無限ループで何をしようとしているのか不明なのですが、フォームが表示されないところを見ると、本当に”無限”にループしているようで、それはプログラミング的にありえないのでは? それは置いておいて、フォームが初めて表示されるタイミングでやりたいが、Form_Loadが完了してから(フォームが表示されてから)行いたい場合に私がとっている方法は、Form_Activateを使っています。ただし、Form_Activateはフォームがアクティブに成るたびに発生するイベントなので、初回であるかどうかは、Privateの変数を持って判断しています。 あまりスマートでは無いですが、この方法でうまく行っています。 他の方で、もっとスマートなやり方有る様なら、フォローお願いします。
- siokara
- ベストアンサー率41% (7/17)
>フォームロード時にDo Loopを使うとフォームが表示されません。フォームロード時には無限ループは使えないんでしょうか?できればフォームロード時に繰り返し処理をしたいんですけど フォームロードの関数を抜けたときにフォームが作成されますので、表示されないですよ。 フォームロード時にブレークポイントつけてステップ実行してみれば確認できます。 >何か方法があれば教えてください。 具体的にどのような処理がしたいのかを書いて頂かないと・ 無限ループ処理は本当にフォームロード時でやらなければいけないものなのかを考える必要がありそうです。 無限ループ自体も含めて・
ループの前に フォーム名.show をやってみてください。 (現在環境がないので間違っていたらごめんなさい)
お礼
ありがとうございます。