VB2005を使っているのですが、フォームにStatusStripを貼り付け、そこにプログレスバーとラベルを追加したのです。
プログレスバーは正常に動作しているのですが、ラベルが思った通りに表示されません。
プログレスバーの場合は、[Do while 〜 Loop]の文中でバーの値を増加させていき、表示をしています。
しかし、それと同時に横に配置したStatusLabelが上手く動作しません。
プログレスバーが動作している最中、「処理中」という文字を表示したいのですが、
その[Do while 〜 Loop]の文中で以下のようなコードを書いても
(Label.Text="処理中")
実行してみると、プログレスバーがMAXになった後で表示されてしまうのです。
これは何故でしょう?
> 実行してみると、プログレスバーがMAXになった後で表示されてしまうのです。
> これは何故でしょう?
プログレスバーがMAXになったからというよりも、Do〜Loop で行っている
他の処理の負荷が高すぎて、画面を再描画する余裕が無かったのでしょう。
下記を試してみてください。
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
For i As Integer = 1 To 1000
Label1.Text = i.ToString()
Next
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
For i As Integer = 1 To 1000
Label1.Text = i.ToString()
Label1.Refresh()
Next
End Sub
ご回答、ありがとうございます!
たしかに「Refresh」を使うことでプログレスバーの動きと同時に表示することができました。
しかし、VB2005ではLabelのツールに対しては「Refresh」というメソッドが可能なようですが、
StatusLabelのメソッドには「Refresh」は見当たらないようです。
無いのでしょうか?
> しかし、VB2005ではLabelのツールに対しては「Refresh」というメソッドが可能なようですが、
> StatusLabelのメソッドには「Refresh」は見当たらないようです。
Label や StatusStrip は コントロール(Control)ですが、
ToolStripStatusLabel は、コンポーネント(Component) なため、
Refresh や Update がありません。Invalidate はありますけど。
> 無いのでしょうか?
StatusStrip の方の Refresh または Update を呼び出してみてください。
For i As Integer = 1 To 1000
ToolStripStatusLabel1.Text = i.ToString()
ToolStripProgressBar1.Increment(1)
StatusStrip1.Update()
Next
コントロールとコンポーネントの差だったんですね!
自分は初心者な為、区別できていなかったです・・・済みません。
ご丁寧に、ありがとうございました!!
ツイート | ![]() |