- ベストアンサー
Visual Basic でループの進度状況を表示する方法を教えてください。
for i=1 to 1000 T.text=str(i) next i とやっても、テキストにiの進度状況は書き込まれません。 いったんSubを呼び出すかまたはタイマーを仕掛けて外に出て元の場所に戻るとiは書き込まれますが、doやforのループでは、そのような中断が許されません。 やむを得ず、gotoを使ったループからいったん外に出る方法で、何とか表示を可能にしています。 もっとスマートな方法があったら教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
textプロパティ設定後、Text1.Refreshを行えば良いです。 DoEventsでも解決しますが、DoEventsはイベントの順序が変化し、問題が発生する場合があります。 例えば、ボタンクリックで処理中、他のボタンをクリックしても、最初の処理が終わるまで次のボタンの処理は行われません。最初のボタンの処理中にDoEventsが発行されると、それまでのイベントが処理されるようになります。DoEventsを使用する場合、DoEventsが何をするのかをきちんと理解することが重要です。
その他の回答 (2)
自信なし for i=1 to 1000 T.text=str(i) DoEvents next i かも
お礼
ありがとうございました。DoEventsステートメントもRefreshメソッドもうまく働きました。 これまでに作ったプログラムがスパゲッティに見えます。 理屈はまったく分かりませんが、両方OKであれば、Refreshのほうが「本来の使い方」に近いように思われます。
- PrintScree
- ベストアンサー率25% (538/2091)
テキストボックスの T にループ中は何も表示されないということですよね? ループの中に DoEvent(DoEventsだったかも…) を入れれば解決します。
お礼
ありがとうございました。DoEventsステートメントもRefreshメソッドもうまく働きました。 これまでに作ったプログラムがスパゲッティに見えます。 理屈はまったく分かりませんが、両方OKであれば、Refreshのほうが「本来の使い方」に近いように思われます。
お礼
ありがとうございました。DoEventsステートメントもRefreshメソッドもうまく働きました。 これまでに作ったプログラムがスパゲッティに見えます。 理屈はまったく分かりませんが、両方OKであれば、Refreshのほうが「本来の使い方」に近いように思われます。