ファイルの転送等ファイルの個数などがわかっている時は
全体数と残数で増やす量を算出できるのですが、
WEBページみたいに総数が分からない時に表示するまでの
進行状況をプログレスバーで表示させるにはどのように
すればよいでしょうか?
環境:win_XP/VB.NET/Framework1.1
プログレスバーの進行状況の値を適当に増やしていくとか。
例えば、
最低値が0で最高値が100とした場合
プログラム内に
何かの処理をさせた後に
ProgressBar1.Value = 50 '見本だから半分にしています。
のように入力して、進行状況を進めていく。
私だったら、間違いなく、上の方法をやっています・・・。
この方法がイヤだという場合は
最大値を自分が想像した時間として、
最低値を0sとして、
開始時から現在の時間までの時間(経過時間)
を算出して、進行状況を表示させるという手もあります。
でも、経過時間が自分の想像した時間を超えてしまった場合、
どうししましょうか?(^^;)
処理が終わってブログレスバーの残りを見て強制的にMAXにしてしまうのは!?
たまには、プログレスバーではなく、PictureBoxで
Dim sngPercen As Single
Dim i As Integer
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
sngPercen = 0
For i = 0 To 1000
'なぜか原因不明でエラーも出ない症状が発生するのを
'防止するため、DoEventsを挟んでいる。
Application.DoEvents()
'変数sngPercenに値を入れています。この変数はメータを動かす数字を入れています。
sngPercen = i / 1000
If sngPercen >= 1 Then
'Set_Picbar(コントロール名(ProgressBarの代わりっと記載した方が分かりやすいかな? _
', 初期値(最初からパーセンテージを埋める数値<範囲:0(Min)〜1(Max)>), _
'塗りつぶす色を指定 _
'True←これ何だっけ? 自分で組んだのに忘れちゃった。とりあえず、Trueで)
Set_Picbar(PictureBox1, 1, Brushes.Blue, True)
MessageBox.Show("完了です", "メッセージ")
Exit Sub
Else
Set_Picbar(PictureBox1, sngPercen, Brushes.Blue, True)
End If
Next
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Set_Picbar(コントロール名(ProgressBarの代わりっと記載した方が分かりやすいかな? _
', 初期値(最初からパーセンテージを埋める数値<範囲:0(Min)〜1(Max)>), _
'塗りつぶす色を指定 _
'True←これ何だっけ? 自分で組んだのに忘れちゃった。とりあえず、Trueで)
Set_Picbar(PictureBox1, 0, Brushes.Blue, True)
End Sub
'パーセントでピクチャボックスを塗ります
Sub Set_Picbar(ByVal pic As PictureBox, _
ByVal sngPercent As Single, _
ByVal ForeColor As Brush, _
Optional ByVal fBorderCase As Boolean = False)
Dim g As Graphics '描画グラフィック
Dim strPercent As String '文字列のためのパーセンテージ
Dim intX As Integer '文字列描画のためのX座標
Dim intY As Integer '文字列描画のためのY座標
Dim intPercent 'パーセンテージの書き換え
'塗りつぶす全体の領域です
Dim objRectangle As New Rectangle(0, 0, _
pic.Width * sngPercent, pic.Height)
'塗りつぶす前の背景を灰色にしています
pic.BackColor = System.Drawing.Color.DarkGray
'描画領域とグラフィックオブジェクトの作成です
pic.Image = New Bitmap(pic.Width, pic.Height)
g = Graphics.FromImage(pic.Image)
'パーセントのチェックです
intPercent = Int(100 * sngPercent + 0.5)
'処理が完了する前に100%にならないようにしています
If intPercent = 0 Then
If Not fBorderCase Then
intPercent = 1
End If
ElseIf intPercent = 100 Then
If Not fBorderCase Then
intPercent = 99
End If
End If
'パーセントの文字を形成しています
strPercent = Format$(intPercent) & "%"
'バーを青色で印字しています
'g.FillRectangle(Brushes.ForeColor, objRectangle)
g.FillRectangle(ForeColor, objRectangle)
'パーセントを白色で印字しています
intX = pic.Width / 2
intY = pic.Height / 2
g.DrawString(strPercent, _
Me.Font, Brushes.White, intX, intY)
'開放
g.Dispose()
End Sub
をやってみるのも面白いかも?
ツイート | ![]() |