7

重複の可能性:
.NET プログレスバーが更新されない

for ループの進行状況を示すプログレス バー クラスを作成しました。プログレス バー クラスのコードは次のとおりです。

Public Class frmProgress
Private Sub frmProgress_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    progressBar.Minimum = 0
End Sub

Public Sub ProgressBarSetup(ByRef Maximum As Integer, ByRef Title As String)
    progressBar.Maximum = Maximum
    progressBar.Value = 0
    Me.Text = Title
    Me.Show()
End Sub

Public Sub IncProg()
    progressBar.Value += 1
    Application.DoEvents()

    If progressBar.Value = progressBar.Maximum Then
        Me.Close()
    End If
End Sub
End Class

for ループで使用する方法は次のとおりです。

Dim pb As New ProgressBar
pb.ProgressBarSetup(5000, "Test")

For i As Integer = 0 To 5000 - 1
      pb.IncProg()
Next

問題は視覚的な問題です。完全なプログレス バーの 70 ~ 85% まで完了してから閉じます。閉じると、プログレス バーの値と最大値は等しくなりますが、バーはその長さの約 4 分の 3 までしか満たされていません。

Application.DoEvents() の代わりに progressBar.Refresh() を使用してみましたが、進行が大幅に遅くなり、それでも同じ結果が得られます。

視覚的に魅力的な進行状況バーを実現する他の方法はありますか?

4

1 に答える 1

14

この効果は Windows 7 では正常に表示されます。問題は、値を X に設定すると、次の 0.5 ~ 1 秒でこの位置にスライドすることです。そのため、アクションが高速で行われている場合、50 ~ 80% で完全に表示されます。解決策は、最初に高い値に設定してから、必要な値に減らすことです。このようなもの:

progressBar.Value += 2
progressBar.Value -= 1

また、最大値を一時的に増やすことを忘れないでください。そうしないと、たとえば、4999 か​​ら 5000 に増やすときに例外が発生する可能性があります (5001 に設定することはできません)。

于 2013-01-08T15:07:47.593 に答える