重置TimeSpan.FromMinutes()

时间:2019-01-09 19:04:00

标签: .net vb.net

我正在尝试使用秒表和TimeSpan。

声明:

Dim swTimer As New Stopwatch
Dim tsCD As TimeSpan
tsCD = TimeSpan.FromMinutes(2)


我已经在计时器(tmrCountingDown)上成功创建了一个“ .Tick”事件,该事件的倒计时如下:

Private Sub tmrCountingDown_Tick(sender As Object, e As EventArgs) Handles tmrCountingDown.Tick
    Dim SamplesTS As TimeSpan = tsCD - swTimer.Elapsed
    btnDisplay.Text = String.Format("{0}{1}:{2:00}", SamplesTS.Hours, SamplesTS.Minutes, SamplesTS.Seconds)
End Sub

这使我可以成功倒计时并在按钮“ btnDisplay”上显示分钟和秒。

侧面问题:当前该行代码显示格式为00:00。有没有办法将其更改为简单的0:00?其中第一组是分钟(两位数),第二组是秒(两位数?)


现在是我遇到的主要问题。当我单击按钮时,应该将.FromMinutes(2)更改为.FromMinutes(2.5)并刷新倒数,而 不重置秒表(我需要保持经过的时间) 就像这样:

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
    Counter += 1 'Just an integer counter that I have
    tsCD = TimeSpan.FromMinutes(2.5)
End Sub

我第一次单击btnDisplay时,它没有执行预期的操作:重置整个倒计时并从2:30开始。相反,它似乎只增加了30秒。当我第二次单击它时,它什至没有任何作用。

问题:如何将每次按钮单击的TimeSpan倒计时刷新至2.5秒,而又不将实际的秒表和计时器弄得一团糟?




任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

这样想:

  • 您有一个不想更改的“时间已过”
  • 您想将“剩余时间”重置为2.5分钟
  • 您当前正在根据“总时间-经过的时间”公式计算剩余时间

如果将所有这些组合在一起,则意味着当您按下按钮时,您想要将“总时间”更改为“当前经过的时间+ 2.5分钟”。换句话说:

tsCD = swTimer.Elapsed + TimeSpan.FromMinutes(2.5)

作为一个元注释,我鼓励您使用真正清晰的描述性名称-理想情况下,不要使用类型指定的前缀,除非它们确实有用(我认为它们不在这里)。如果您给TimeSpan命名为totalCountdownTime或类似名称,我怀疑您已经解决了这个问题。当然,当名称不能传达所有内容时,您可以在XML注释中添加更多详细信息:)