none
タイマーを作りたい RRS feed

  • 質問

  • 5分間タイマーを作る目的です。
    スタート時の現在時刻を Now で取得して、変数Aに格納しておいて、
    timerを使って取得した時々刻々の時刻を変数Bに格納、差を変数Cに格納、
    フォーム上のLabelかTextBoxにCを表示しようと思ったのですが。代入する変数の型が分かりません。
    当初時刻と現在時刻の差を求める良い方法を教えて頂けたら有り難いです。
    ネット検索したら、固定した暦日を基準にする説明がありましたが、
    私の場合はプログラムを起動した時刻がスタート時刻になりますので、参考になりませんでした。

    いつまでたっても初心者状態ですので宜しくお願いします。

    2019年7月4日 7:57

回答

  • StopWatchクラスを使用されてみてはいかがでしょうか?
    時間の差を代入する変数としては、TimeSpan型が適切でしょう。

    [VB] Stopwatch クラスで処理時間を計測する方法
    https://code.msdn.microsoft.com/windowsdesktop/VB-Stopwatch-9678d2bc

    その他にもいろいろサンプルが見つかると思いますので探してみて下さい。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答の候補に設定 Luky9 2019年7月4日 8:53
    • 回答としてマーク Easy Unemployed 2019年7月4日 11:48
    2019年7月4日 8:24
    モデレータ
  • Private StartTime As Date
    Private EndTime As Date
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        StartTime = Now
        EndTime = StartTime.AddMinutes(5.0)
        Timer1.Start()
    End Sub
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim currentTime As Date = Now
        Dim passedTime As TimeSpan = currentTime - StartTime
        Dim remaingTime As TimeSpan = EndTime - currentTime
    
        Label1.Text = "現在日時:" & currentTime.ToLongDateString() & " " & currentTime.ToLongTimeString()
        If currentTime < EndTime Then
            Label2.Text = String.Format("経過: {0:N0}分{1,2}.{2:0000}秒", Fix(passedTime.TotalMinutes), passedTime.Seconds, passedTime.Milliseconds)
            Label3.Text = String.Format("残り: {0}", remaingTime)
        Else
            Label2.Text = "終了"
            Label3.Text = ""
            Timer1.Stop()
        End If
    End Sub

    2019年7月4日 8:31

すべての返信

  • StopWatchクラスを使用されてみてはいかがでしょうか?
    時間の差を代入する変数としては、TimeSpan型が適切でしょう。

    [VB] Stopwatch クラスで処理時間を計測する方法
    https://code.msdn.microsoft.com/windowsdesktop/VB-Stopwatch-9678d2bc

    その他にもいろいろサンプルが見つかると思いますので探してみて下さい。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答の候補に設定 Luky9 2019年7月4日 8:53
    • 回答としてマーク Easy Unemployed 2019年7月4日 11:48
    2019年7月4日 8:24
    モデレータ
  • Private StartTime As Date
    Private EndTime As Date
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        StartTime = Now
        EndTime = StartTime.AddMinutes(5.0)
        Timer1.Start()
    End Sub
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim currentTime As Date = Now
        Dim passedTime As TimeSpan = currentTime - StartTime
        Dim remaingTime As TimeSpan = EndTime - currentTime
    
        Label1.Text = "現在日時:" & currentTime.ToLongDateString() & " " & currentTime.ToLongTimeString()
        If currentTime < EndTime Then
            Label2.Text = String.Format("経過: {0:N0}分{1,2}.{2:0000}秒", Fix(passedTime.TotalMinutes), passedTime.Seconds, passedTime.Milliseconds)
            Label3.Text = String.Format("残り: {0}", remaingTime)
        Else
            Label2.Text = "終了"
            Label3.Text = ""
            Timer1.Stop()
        End If
    End Sub

    2019年7月4日 8:31
  • 回答ありがとうございます。「TimeSpan型」と言うのがあるのですね。貼って頂いたリンクで勉強します。
    2019年7月4日 11:43
  • コード迄ご教示頂いて有難うございます。
    一行ずつ勉強します。

    2019年7月4日 11:46