全体量が分からない時にプログレスバーを使うには?


ドット  2004-10-08 01:45:27  No: 116827

ファイルの転送等ファイルの個数などがわかっている時は
全体数と残数で増やす量を算出できるのですが、
WEBページみたいに総数が分からない時に表示するまでの
進行状況をプログレスバーで表示させるにはどのように
すればよいでしょうか?

環境:win_XP/VB.NET/Framework1.1


マグ  2004-10-08 02:25:30  No: 116828

プログレスバーの進行状況の値を適当に増やしていくとか。

例えば、

最低値が0で最高値が100とした場合

プログラム内に
何かの処理をさせた後に
ProgressBar1.Value = 50 '見本だから半分にしています。
のように入力して、進行状況を進めていく。

私だったら、間違いなく、上の方法をやっています・・・。

この方法がイヤだという場合は

最大値を自分が想像した時間として、
最低値を0sとして、
開始時から現在の時間までの時間(経過時間)
を算出して、進行状況を表示させるという手もあります。

でも、経過時間が自分の想像した時間を超えてしまった場合、
どうししましょうか?(^^;)


がつ  2004-10-08 02:48:51  No: 116829

処理が終わってブログレスバーの残りを見て強制的にMAXにしてしまうのは!?


マグ  2004-10-09 17:42:04  No: 116830

たまには、プログレスバーではなく、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

をやってみるのも面白いかも?


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

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






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