【问题标题】:VB.NET Stopwatch/TimeSpanVB.NET 秒表/时间跨度
【发布时间】:2013-03-22 22:55:01
【问题描述】:

我正在尝试创建一个秒表,它允许 numbericupdown 根据需要调整时间。现在,如果我在时间流逝时将 numbericupdown 更改为“2”,它将使整个值加倍,包括已经计时的值,这是我不想要的。有没有办法使用秒表来计算从 numbericupdown 的值更改时开始的时间,如果可以的话,有人可以提供一个例子吗?

Dim BTStopWatch1 As New Diagnostics.Stopwatch

Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
    Dim elapsed As TimeSpan = Me.BTStopWatch1.Elapsed
    elapsed = New TimeSpan(elapsed.Ticks * NumericUpDown4.Value)
    lblBnch.Text = String.Format("{0:00}   :   {1:00}   :   {2:00}", Math.Floor(elapsed.TotalHours), elapsed.Minutes, elapsed.Seconds)
End Sub

Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
    Timer4.Start()
    Me.BTStopWatch1.Start()
End Sub

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    Timer4.Stop()
    Me.BTStopWatch1.Stop()
End Sub

【问题讨论】:

  • 那么你想做什么?我还不清楚。
  • 我正在制作一个秒表来记录构建产品所需的时间,其中 numbericupdown 用于计算在任何给定时间从事产品工作的人数。
  • 您认为从事产品工作的人数会线性提高开发速度吗?见Brooks's law on wiki。 :)
  • 嘿,我明白你在说什么,但这更像是一条生产/装配线。现在是计算向客户收取多少费用($$/hr)
  • 我仍然不清楚这将如何工作,尽管我现在对您的要求有了更好的理解。

标签: vb.net timespan stopwatch elapsed


【解决方案1】:

问题出在这一行:

elapsed = New TimeSpan(elapsed.Ticks * NumericUpDown4.Value)

您将到目前为止的刻度总数乘以 NumericUpDown 的值。这不会考虑 NumericUpDown 的历史记录。

您想要做的是将经过的刻度数存储在一个变量中,该变量在对Timer4_Tick 的调用之间保持不变。然后将 1 添加到该变量乘以来自计时器回调中的 NumericUpDown 的值。为此,您可以将调用 elapsed 的变量存储为初始化为零的实例变量,并在计算新值时使用加法而不是乘法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2022-10-13
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多