VB.net 实时时间流逝功能

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18841933/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 17:09:44  来源:igfitidea点击:

VB.net real-time time elapsed feature

vb.nettimercountdowntimer

提问by Marc Intes

I already have created a real time clock that synchronizes with the computer time and is being displayed in a label.

我已经创建了一个与计算机时间同步并显示在标签中的实时时钟。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Time.Text = Date.Now.ToString("h:mm:ss tt")
End Sub

I want to make a real-time time elapsed feature that keeps on counting the seconds/minutes/hours elapsed from the time it started till the time it stops and it would be basing on the real-time clock i have created. I would be creating a start and stop button for this. Is this possible? Thanks in advance.

我想制作一个实时经过时间的功能,它不断计算从它开始到停止时间经过的秒/分钟/小时,它将基于我创建的实时时钟。我将为此创建一个开始和停止按钮。这可能吗?提前致谢。



I am now able to complete everything and i added a feature that records the starting and ending time based on my real time clock. Here is my working code:

我现在能够完成所有事情,并且我添加了一个功能,可以根据我的实时时钟记录开始和结束时间。这是我的工作代码:

Dim hr, min, sec As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Time.Text = Date.Now.ToString("h:mm:ss tt")
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Start.Text = ""
    EndLbl.Text = ""
    Elapse.Text = ""
    Timer2.Enabled = True
    Start.Text = Time.Text
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

    sec = sec + 1
    If (sec = 60) Then
        sec = 0
        min = min + 1
    ElseIf (min = 60) Then
        min = 0
        hr = hr + 1
    ElseIf (hr = 24) Then
        hr = 0
        min = 0
        sec = 0
    End If

    Elapse.Text = String.Format("{0}hr : {1}min : {2}sec", hr, min, sec)
    Timer2.Interval = 1000
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Timer2.Enabled = False
    EndLbl.Text = Label4.Text

    hr = 0
    min = 0
    sec = 0
    Timer2.Interval = 1
End Sub

Credits to the starting code given by NeverHopeless. Thanks alot.

归功于 NeverHopeless 给出的起始代码。非常感谢。

回答by George

I suggest you use only 1 timer:

我建议您只使用 1 个计时器:

Public Class Form2

Private _elapseTimerRunning As Boolean = False
Private _elapseStartTime As DateTime

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
    Timer1.Interval = 1000
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    txtTime.Text = Now.ToString("h:mm:ss tt")
    If _elapseTimerRunning = True Then
        Dim elapsedtime = DateTime.Now.Subtract(_elapseStartTime)
        txtElapsed.Text = String.Format("{0}hr : {1}min : {2}sec", elapsedtime.Hours, elapsedtime.Minutes, elapsedtime.Seconds)
    End If
End Sub

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
    _elapseStartTime = DateTime.Now
    _elapseTimerRunning = True
End Sub

Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
    _elapseTimerRunning = False
End Sub

End Class

结束类

回答by dbasnett

An example for displaying the elapsed time the application has run.

显示应用程序运行所用时间的示例。

Public Class Form1
    'shows elapsed time that the app has run
    '
    Dim elapTimer As New Threading.Timer(AddressOf tick, Nothing, 1000, 1000)
    Dim stpw As Stopwatch = Stopwatch.StartNew

    Private Sub tick(state As Object)
        If stpw.IsRunning Then
            'format - http://msdn.microsoft.com/en-us/library/ee372287.aspx
            Me.Invoke(Sub()
                          Label1.Text = stpw.Elapsed.ToString("d\ \ hh\:mm\:ss\.ff")
                      End Sub)
        End If
    End Sub

End Class

To add start/stop functionality using buttons:

使用按钮添加启动/停止功能:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'start the elapsed timer
    stpw.Start() 'continue 
    'or
    'stpw.Restart() 'restart
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    stpw.Stop()
End Sub

回答by NeverHopeless

Something like this would help you: (untested, but will give you a starter)

像这样的东西会帮助你:(未经测试,但会给你一个入门)

Dim hr, min, sec As Integer 'msec;

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Timer1.Enabled = True
    Timer2.Enabled = True
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    'msec++;
    'if(msec == 60)  { msec = 0; sec++; }

    sec+=1;
    if(sec  = 60) Then 
      sec = 0 : min+=1
    end if
    if(min  = 60) Then
      min = 0 : hr+=1
    end if
    if(hr = 24)  Then
      hr  = 0 : min = 0 : sec = 0
    end if   

    'TimeElapsed.Text = String.Format("{0}:{1}:{2} {3}", hr, min, sec, msec)
     TimeElapsed.Text = String.Format("{0}:{1}:{2}", hr, min, sec) 
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Time.Text = Date.Now.ToString("h:mm:ss tt")
End Sub

NOTE:Timer2 will run for every second.

注意:Timer2 将为每个second.