0

操作の残り時間を表示しようとすると問題が発生します

問題は残りのタイマーのみです。負の値が得られます...

これは、10000 ミリ秒 (10 秒) の操作の例です。

ここに画像の説明を入力

とにかく、タイムスパンから「-」文字を削除すると、時間と分が正しくない値のままになります...

   Dim time_out as integer = 60000 ' 'Milisegundos

   Dim StartTime As DateTime ' Tiempo inicio
   Dim EndTime As DateTime ' Tiempo final

   Dim ElapsedTime As TimeSpan ' Tiempo transcurrido
   Dim RemainingTime As TimeSpan ' Tiempo restante


    ' Elapsed Time
#Region " Elapsed Time Function "

    Public Function Print_Elapsed_Time()
        If StartTime.ToString = "01/01/0001 0:00:00" Then
            StartTime = Now
            StartTime = StartTime.AddSeconds(-1)
        End If
        ElapsedTime = Now().Subtract(StartTime)
        Return String.Format("{0:00}:{1:00}:{2:00}", CInt(Math.Floor(ElapsedTime.TotalHours)) Mod 60, CInt(Math.Floor(ElapsedTime.TotalMinutes)) Mod 60, CInt(Math.Floor(ElapsedTime.TotalSeconds)) Mod 60)
    End Function
#End Region

#Region " Remaining Time Function "

    Public Function Print_Remaining_Time()
        If EndTime.ToString = "01/01/0001 0:00:00" Then
            EndTime = Now
            EndTime = EndTime.AddMilliseconds(Time_Out - 1000)
        End If
        RemainingTime = Now().Subtract(EndTime)
        Return String.Format("{0:00}:{1:00}:{2:00}", CInt(Math.Floor(RemainingTime.TotalHours)) Mod 60, CInt(Math.Floor(RemainingTime.TotalMinutes)) Mod 60, CInt(Math.Floor(RemainingTime.TotalSeconds)) Mod 60).Replace("-", "")
    End Function

#End Region
4

2 に答える 2

2

タイマーと2つのラベルを使用した10秒からのカウントダウンの例を次に示します。

'example - countdown from 10 secs
Dim countdown As New TimeSpan(0, 0, 10)
Dim stpw As New Stopwatch

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If stpw.IsRunning Then
        stpw.Stop()
        Timer1.Stop()
    Else
        stpw.Stop()
        stpw.Reset()
        stpw.Start()
        Timer1.Interval = 100
        Timer1.Start()
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'label1 - elapsed time
    'label2 - time remaining
    If stpw.Elapsed <= countdown Then
        Label1.Text = stpw.Elapsed.ToString
        Label2.Text = (countdown - stpw.Elapsed).ToString
    Else
        stpw.Stop()
        Label1.Text = countdown.ToString
        Label2.Text = "00:00:00"
    End If
End Sub
于 2013-03-18T18:35:03.563 に答える
1

私はあなたが望む終了時間だと思います:

RemainingTime = EndTime.Subtract(Now)

それ以外の場合は、これらをどのように初期化したかわかりませんが、次の変更を行いました:

Dim StartTime As DateTime = DateTime.MinValue ' Tiempo inicio
Dim EndTime As DateTime = DateTime.MinValue ' Tiempo final

また:

If StartTime = DateTime.MinValue Then  ' ... etc   '

しかし、おそらくフラグか何かは、リセットを通知するためのより良い方法です。

于 2013-03-18T18:38:21.967 に答える