• ベストアンサー

Visual Basic でループの進度状況を表示する方法を教えてください。

for i=1 to 1000 T.text=str(i) next i とやっても、テキストにiの進度状況は書き込まれません。 いったんSubを呼び出すかまたはタイマーを仕掛けて外に出て元の場所に戻るとiは書き込まれますが、doやforのループでは、そのような中断が許されません。 やむを得ず、gotoを使ったループからいったん外に出る方法で、何とか表示を可能にしています。 もっとスマートな方法があったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

textプロパティ設定後、Text1.Refreshを行えば良いです。 DoEventsでも解決しますが、DoEventsはイベントの順序が変化し、問題が発生する場合があります。 例えば、ボタンクリックで処理中、他のボタンをクリックしても、最初の処理が終わるまで次のボタンの処理は行われません。最初のボタンの処理中にDoEventsが発行されると、それまでのイベントが処理されるようになります。DoEventsを使用する場合、DoEventsが何をするのかをきちんと理解することが重要です。

Ishiwara
質問者

お礼

ありがとうございました。DoEventsステートメントもRefreshメソッドもうまく働きました。 これまでに作ったプログラムがスパゲッティに見えます。 理屈はまったく分かりませんが、両方OKであれば、Refreshのほうが「本来の使い方」に近いように思われます。

その他の回答 (2)

noname#20377
noname#20377
回答No.2

自信なし for i=1 to 1000 T.text=str(i) DoEvents next i かも

Ishiwara
質問者

お礼

ありがとうございました。DoEventsステートメントもRefreshメソッドもうまく働きました。 これまでに作ったプログラムがスパゲッティに見えます。 理屈はまったく分かりませんが、両方OKであれば、Refreshのほうが「本来の使い方」に近いように思われます。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

テキストボックスの T にループ中は何も表示されないということですよね? ループの中に DoEvent(DoEventsだったかも…) を入れれば解決します。

Ishiwara
質問者

お礼

ありがとうございました。DoEventsステートメントもRefreshメソッドもうまく働きました。 これまでに作ったプログラムがスパゲッティに見えます。 理屈はまったく分かりませんが、両方OKであれば、Refreshのほうが「本来の使い方」に近いように思われます。

関連するQ&A