アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のコードを実行してみます。

Private Sub Command1_Click()
ProgressBar1.Visible = True
Label1.Visible = True
ProgressBar1.Max = Val(Text1.Text)
For i = 1 To Val(Text1.Text)
Text1.Text = i
ProgressBar1.Value = i
Next i
MsgBox "終了しました。"
ProgressBar1.Visible = False
Label1.Visible = False
End Sub

「ProgressBar1」はループに入る前に「Visible = True」になります。
「Label1」はループ終了後に「Visible = True」になります。
「Text1.Text = i」はループ終了後に表示されます。

本来は、「Label1」はループに入る前に「Visible = True」にして、「Text1.Text = i」をループ中に表示させたいのですが、できません。
どこかコードが間違っているのでしょうか。

A 回答 (2件)

Windowsのプログラムというのは、OSからイベントで駆動され、プログラムでの処理が終わってからOSに制御を返します。


そのため、基本的にはひとつのイベント内で、他のイベントが発生するような処理は思うように行かないことがあるのです。
(ここでは詳しくは説明しきれませんが...)
ykkw_2001さんのおっしゃる「DoEvent」ステートメントは、このひとつのイベント内での連続処理中に、一度、プログラムが制御を手放してWindowsに処理をするタイミングを与えるための命令です。
お試しください。
    • good
    • 0
この回答へのお礼

>他のイベントが発生するような処理は思うように行かないことがあるのです。
...どうも、そのようですね。
しかしながら、
「ProgressBar1」がループ前に「Visible = True」
「Label1」がループ終了後に「Visible = Truue」
同じループに入る前なのに・・・・って思ってしまうのは素人考えでしょうか。
昔のBASICは必ず行の上から実行されていたので、なんとなく不思議でした。
これが、VBのバグなのか、WinOS自体の仕様なのかとの疑問もありましたが「DoEvents」が用意されているということは、WinOS自体の仕様なのでしょうね。
よくわかりました。 有り難うございました。

お礼日時:2001/12/10 09:23

ループ内に


doevents
をいれてみたら、どうでしょか?
    • good
    • 0
この回答へのお礼

できました。 有り難うございます。

お礼日時:2001/12/10 09:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!