首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VB.NET中正确使用ProgressBar

如何在VB.NET中正确使用ProgressBar
EN

Stack Overflow用户
提问于 2013-01-29 15:56:55
回答 1查看 52.2K关注 0票数 4

我必须在我的VB.NET程序中使用进度条,它的行为与VB6中的进度条非常不同。例如,如果我有一个过程,通过一些循环填充一个datagridview,并用progressbar显示进度,会发生什么?

Datagridview的填充率是100%,而进度条大约是50%!

下面是演示一个问题的示例程序。创建一个新项目,添加一个windows窗体,然后将此代码复制到Form1的代码上。

代码语言:javascript
复制
Public Class Form1

Dim myMax As Integer = 100000
Dim pb As New ProgressBar
Dim dgv As New DataGridView
Dim WithEvents ti As New Timer

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    With Me
        .Width = 400
        .Height = 250

        .Controls.Add(pb)
        With pb
            .Maximum = myMax
            .Dock = DockStyle.Bottom
        End With

        .Controls.Add(dgv)
        With dgv
            .ColumnCount = 2
            .Dock = DockStyle.Fill
            .Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            .Visible = False
        End With
    End With

    ti.Start()
End Sub

Private Sub OnFormLoaded(ByVal sender As Object, ByVal e As EventArgs) Handles ti.Tick
    ti.Enabled = False
    ti.Dispose()

    Dim temp As Integer

    For t = 0 To myMax

        If t Mod 100 = 0 Then
            pb.Value = t
            pb.Refresh()
            Application.DoEvents()

            temp += 1

            dgv.Rows.Add(New String() { _
                t.ToString, _
                temp.ToString _
                })
        End If
    Next
    pb.Value = myMax
    pb.Visible = False
    dgv.Visible = True
    dgv.Focus()

End Sub
End Class

这段代码创建了几个控件,加载了一个窗体,并启动了一个循环来填充数据,并在进度条中显示进度。在此之后,程序隐藏了一个进度条,并显示了一个数据行视图,这是具体(真实世界)程序中的常见情况。

问题是,尽管两者都有,数据网格视图填充和更新进度条都是从同一个循环(以100步为单位)结束的,填充数据网格视图的速度比进度条显示进度的速度快得多,并将其隐藏在大约50%的位置。

这与VB6有很大的不同,在那里填充和显示是完全汉化的,网格将在进度条达到100%的值后显示。

如何在显示的代码上获得VB.NET中进度条的这些功能?

我尝试刷新进度条和DoEvents,但这还不足以让它像预期的那样工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 18:13:15

为了解决这个问题,而不是仅仅从一个ProgressBar做一个“线程科幻小说”,你必须使用一种技术,这通常是微软的图形用户界面工具包。

这样的方法可能会解决您的具体问题:

代码语言:javascript
复制
    If t Mod 100 = 0 Then
        pb.Value = t
     If pb.Value > 0 Then pb.Value -= 1

        temp += 1

        dgv.Rows.Add(New String() { _
            t.ToString, _
            temp.ToString _
            })
    End If
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14578123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档