2013-09-17 2 views
2

Я уже создал часы реального времени, которые синхронизируются с компьютерным временем и отображаются на этикетке.Истекшая функция времени VB.net

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 

Я хочу, чтобы время, в режиме реального времени прошло функция, которая держит на подсчет секунд/минут/часов, прошедшее с момента это началось до того времени, он останавливается, и он будет основывать на часы реального времени Я создал. Я бы создал кнопку запуска и остановки для этого. Это возможно? Заранее спасибо.


Теперь я могу выполнить все, и я добавил функцию, которая записывает начальное и конечное время, основанное на моих часах реального времени. Вот мой рабочий код:

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 

Кредиты на стартовый код предоставлены NeverHopeless. Большое спасибо.

+0

Возможно, вам нужно запланировать экземпляр таймера после каждого второго и Timer_Tick этикетки обновления событие. За каждые 60 секунд минуты будут увеличены и так далее. После нажатия кнопки установите значение «Timer.Enabled = false». – NeverHopeless

+0

да, это то, что я хочу сделать, но моя проблема заключается в том, как я могу отображать его в состоянии, поэтому формат будет час: минуты: секунды –

ответ

7

Я предлагаю вам использовать только один таймер:

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 класса

+1

Лучший код, чем «подсчет» секунд! Поскольку события таймера не являются надежными, нельзя полагать, что таймер 1000 мс срабатывает после 1000 мс ТОЧНО. – igrimpe

1

Нечто подобное поможет вам: (непроверенные, но даст вам стартер)

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 

Примечание: Timer2 будет работать для каждого second.

+0

я буду пытаться это спасибо –

+0

он работает, но как я могу отображать его только час : минуты: секунды. поэтому он будет соответствовать моим часам реального времени. –

+0

Обновленный код. Просто заметил, что мой код был смесью C# и VB.Net, мой плохой: S – NeverHopeless

2

Пример для отображения времени, прошедшего заявка запуска.

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 

Чтобы добавить старт/стоп функциональность с помощью кнопок:

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 
+0

Спасибо, что это улучшилось и сделало код более простым и точным. –

+0

Добро пожаловать. – dbasnett

+0

Я не прочь проголосовать, но без комментариев я не могу исправить/улучшить свой ответ. – dbasnett

Смежные вопросы