2013-01-08 74 views
6

可能重复:
.NET progressbar not updatingVB.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%的完整进度条,然后关闭。关闭时,进度条的值和最大值是相等的,但该条只能填充到其长度的四分之三左右。

我尝试使用progressBar.Refresh()而不是Application.DoEvents(),但它减慢了很多进度 - 并且仍然给出了相同的结果。

是否有任何其他方法来实现更好的视觉吸引力进度栏?

回答

12

在Windows 7上看到这种效果是正常的。问题是当您将值设置为X时,它会在接下来的0.5-1秒内滑动到此位置。所以如果你的行动发生得很快,你只会看到它在50-80%。解决方法是首先设置一个更高的值,然后递减到所需的值。事情是这样的:

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

而且也不要忘了临时增加最大,或者你可能会得到一个例外,例如,从4999到递增5000(你不能设置为5001)时。

+0

好吧我会尝试。是的,我忘了把5000-1:p这只是一个例子。谢谢!我现在就去试试 – Alex

+0

完美。这样可行!优秀。只要网站允许,我会尽快接受你的回答:)非常感谢! – Alex

+0

谢谢!这使我疯了,我把它设置为50(%),它只会上升到1/3 ... – Sebastian