【问题标题】:Progress Bar increments at twice the intended speed each time进度条每次以预期速度的两倍递增
【发布时间】:2016-12-21 03:28:34
【问题描述】:
Private Time As New Timer

Private Sub btnWood_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWood.Click


    prgWood.Value = 0

    Time.Interval = 1000
    Time.Start()
    AddHandler Time.Tick, AddressOf IncreaseProgressBar

    If prgWood.Value <> prgWood.Maximum Then
        btnWood.Enabled = False
    End If

    Dim intAmountofWood As Integer = 11 * Rnd() + 10
    intWood = intWood + intAmountofWood

    Me.lblWoodAmount.Text = intWood

Private Sub IncreaseProgressBar(ByVal sender As Object, ByVal e As EventArgs)

    prgWood.Increment(10)

    If prgWood.Value = prgWood.Maximum Then
        prgWood.Increment(0)
        Time.Stop()
        btnWood.Enabled = True
    End If

End Sub

对于我的进度条,我使用 Timer 每 1 秒将值增加 10。当我调试项目时,它第一次运行良好(进度条完成需要 10 秒)但是当我第二次单击按钮时,它只需要 5 秒,然后每次越来越少。此代码适用于我正在尝试为学校制作的增量游戏。

【问题讨论】:

  • 在构造函数中只添加一次 AddHandler。您每次都在添加它,这意味着每次启动时都会多次调用您的 Tick 事件。
  • @LarsTech 感谢您的回答,如何在将计时器与进度条相关联的同时摆脱 AddHandler?抱歉,我对 vb 还是很陌生。

标签: vb.net button timer progress-bar


【解决方案1】:

来自 LarsTech 的评论:

Public Class Form1
    Private Time As New Timer

    Public Sub New()
        'Initialisation, etc

        AddHandler Time.Tick, AddressOf IncreaseProgressBar
    End Sub

    'Other methods, etc
End Class

然后你需要从按钮中删除AddHandler 点击事件

【讨论】:

    【解决方案2】:

    你能做到吗?

    创建sub 并添加此代码

    `

    ProgressBar1.Value = e.ProgressPercentage
    If ProgressBar1.Value = ProgressBar1.Maximum Then
        ProgressBar1.Value = ProgressBar1.Minimum
    End If
    

    `

    然后在这里调用那个子。

    `Private Sub btnWood_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWood.Click
    
        '**Name of the Sub**
        prgWood.Value = 0
    
        Time.Interval = 1000
        Time.Start()
        AddHandler Time.Tick, AddressOf IncreaseProgressBar
    
        If prgWood.Value <> prgWood.Maximum Then
            btnWood.Enabled = False
        End If
    
        Dim intAmountofWood As Integer = 11 * Rnd() + 10
        intWood = intWood + intAmountofWood
    
        Me.lblWoodAmount.Text = intWood
    
    End Sub
    `
    

    让我们看看这个是否有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多