【问题标题】:VB.NET Progress Bar [duplicate]VB.NET 进度条 [重复]
【发布时间】:2012-12-22 11:27:47
【问题描述】:

可能重复:
.NET progressbar not updating

我构建了一个进度条类,用于显示我的 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() 但它大大减慢了进度 - 仍然给我同样的结果。

有没有其他方法可以实现视觉上更吸引人的进度条?

【问题讨论】:

    标签: vb.net for-loop progress-bar


    【解决方案1】:

    在 Windows 7 上看到这种效果是正常的。问题是当您将值设置为 X 时,它会在接下来的 0.5-1 秒内滑到这个位置。因此,如果您的动作发生得很快,您只会看到它在 50-80% 的情况下完成。解决方案是首先设置为更高的值,然后减少到您想要的值。像这样的:

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

    并且不要忘记临时增加最大值,否则您可能会遇到异常,例如,从 4999 增加到 5000 时(您不能设置为 5001)。

    【讨论】:

    • 好吧,我试试。是的,我忘了放 5000-1 :p 这只是一个例子。谢谢!我现在就去试试
    • 完美。这样可行!优秀。只要网站允许,我会立即接受您的回答 :) 非常感谢!
    • 谢谢!这让我发疯了,我将它设置为 50(%),它只会上升到 1/3...
    • @SebastianGodelet:没问题。如果我的回答对你有帮助,请考虑点赞。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多