VB.NET进度条

7

我建立了一个进度条类,用于显示我的 for 循环中的进度。以下是进度条类的代码:

可能重复:
.NET 进度条不更新

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%,然后关闭。关闭时,进度条的值和最大值相等,但是该栏仅填充了其长度的四分之三左右。 我尝试使用progressBar.Refresh()而不是Application.DoEvents(),但它会严重减慢进度,并且仍然给我相同的结果。是否有其他方法来实现更好的视觉效果进度条?
1个回答

14

在Windows 7上看到这种效果是正常的。问题在于当您将值设置为X时,它会在接下来的0.5-1秒内滑动到该位置。因此,如果您的操作速度很快,您只会看到它达到50-80%。解决方法是先将其设置为较高的值,然后递减到所需值。类似于这样:

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

而且不要忘记暂时增加最大值,否则可能会出现异常,例如在从4999增加到5000时(您无法设置为5001)。


好的,我会尝试一下。是的,我忘记加上5000-1 :p 这只是一个例子。谢谢!我现在去尝试一下。 - Alex
太好了,它有效!非常棒。一旦网站允许我,我会接受你的答案 :) 非常感谢! - Alex
谢谢!这让我抓狂了,我将它设置为50%,但它只能增加到1/3... - Sebastian
1
@SebastianGodelet:没问题。如果我的回答对您有帮助,请考虑给它点赞。谢谢。 - Victor Zakharov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接