プログレスバーの横に文字を付けたい

解決


翔太  2007-09-05 06:04:15  No: 137335

VB2005を使っているのですが、フォームにStatusStripを貼り付け、そこにプログレスバーとラベルを追加したのです。
プログレスバーは正常に動作しているのですが、ラベルが思った通りに表示されません。

プログレスバーの場合は、[Do while  〜 Loop]の文中でバーの値を増加させていき、表示をしています。
しかし、それと同時に横に配置したStatusLabelが上手く動作しません。
プログレスバーが動作している最中、「処理中」という文字を表示したいのですが、
その[Do while 〜  Loop]の文中で以下のようなコードを書いても
(Label.Text="処理中")
実行してみると、プログレスバーがMAXになった後で表示されてしまうのです。
これは何故でしょう?


魔界の仮面弁士  2007-09-05 09:32:09  No: 137336

> 実行してみると、プログレスバーが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


翔太  2007-09-06 01:43:35  No: 137337

ご回答、ありがとうございます!
たしかに「Refresh」を使うことでプログレスバーの動きと同時に表示することができました。

しかし、VB2005ではLabelのツールに対しては「Refresh」というメソッドが可能なようですが、
StatusLabelのメソッドには「Refresh」は見当たらないようです。
無いのでしょうか?


魔界の仮面弁士  2007-09-06 03:14:14  No: 137338

> しかし、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


翔太  2007-09-06 04:50:16  No: 137339

コントロールとコンポーネントの差だったんですね!
自分は初心者な為、区別できていなかったです・・・済みません。

ご丁寧に、ありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加