Как преобразовать строку в интервал времени?Visual Basic, секундомер, круговая система - PullRequest
0 голосов
/ 30 ноября 2018

Я новичок и делаю секундомер с функцией круга, используя Visual Studio 2012, Visual Basic.Теперь я застрял в функции круга.В функции круга я хочу отобразить результат, используя просмотр списка ... Когда пользователь нажимает кнопку круга 2 раза, он должен показывать время круга между первым и вторым щелчком ... но я не получаю результат.Есть ли кто-нибудь, чтобы решить мою проблему?заранее спасибо, вот код события кнопки круга

Private Sub btnLap_Click(sender As Object, e As EventArgs) Handles btnLap.Click

    Dim lap As String = (sw.Elapsed.Hours.ToString("00") & ":" & sw.Elapsed.Minutes.ToString("00") & _
      ":" & sw.Elapsed.Seconds.ToString("00") & ":" & sw.Elapsed.Milliseconds.ToString("00"))

    lapcount += 1
    Dim i As Integer = ListView1.Items.Count
    If i <= 0 Then
        ListView1.Items.Add(CStr(lapcount), i)
        ListView1.Items(i).SubItems.Add(lap)
        ListView1.Items(i).SubItems.Add(lap)
    Else
        ListView1.Items.Add(CStr(lapcount), i)
        ListView1.Items(i).SubItems.Add(lap)
        ListView1.Items(i).SubItems.Add((TimeSpan.parse(lap)- Timespan.parse(lastlap)).ToString) ''' I can't subtract the value from 2nd click to first click

    End If
    lastlap = (ListView1.Items(i).SubItems(1).ToString)
End Sub

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

большое спасибо за ответы ... наконец-то я закончил свое приложение секундомера ... я сделал это, и мой лидер дал мне 8 из 10 ... это очень хорошо для меня, вот форма дизайна и код

visual basic 2012, секундомер с кнопкой кругаКак форма 'Dim SW As New System.Diagnostics.Stopwatch ()

Dim lapcount As Integer
Dim lastlap As String

'スタート・ストップボタン
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
    If btnStart.Text = "Start" Then
        sw.Start()     '時間計測開始
        Timer1.Interval = 10
        Timer1.Enabled = True
        btnStart.Text = "Stop"

    Else
        sw.Stop()   '時間計測一時停止
        Timer1.Enabled = False
        btnStart.Text = "Start"
    End If

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    lblTime.Text = sw.Elapsed.ToString("hh\:mm\:ss\:ff")

End Sub
'cancel / reset ボタン
Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click
    sw.Reset()     '初期状態にする
    Timer1.Enabled = False
    lblTime.Text = "00:00:00:00"
    ListView1.Items.Clear()
    btnStart.Text = "Start"
    lapcount = 0

End Sub

'ラップボタン
Private Sub btnLap_Click(sender As Object, e As EventArgs) Handles btnLap.Click

    Dim lap = sw.Elapsed.ToString("hh\:mm\:ss\:fff") ' ラップ時間を変数に代入

    lapcount += 1
    Dim i As Integer = ListView1.Items.Count
    If i <= 0 Then                                       ' ListviewのアイテムのValueが0または0より小さければ
        ListView1.Items.Add(CStr(lapcount), i)
        ListView1.Items(i).SubItems.Add(lap)                 'アイテムとサブアイテム表示
        ListView1.Items(i).SubItems.Add(lap)

    Else '文字列となっている結果時間を整数型に変換する/ // ラップ経過時間を取得するため
        Dim day As Integer = 0
        Dim hr As Integer = CInt(Strings.Left(lap, 2))
        Dim min As Integer = CInt(Strings.Mid(lap, 4, 2))
        Dim sec As Integer = CInt(Strings.Mid(lap, 7, 2))
        Dim milli As Integer = CInt(Strings.Mid(lap, 10, 3))

        Dim dayy As Integer = 0
        Dim hrr As Integer = CInt(Strings.Mid(lastlap, 19, 2))
        Dim minn As Integer = CInt(Strings.Mid(lastlap, 22, 2))
        Dim secc As Integer = CInt(Strings.Mid(lastlap, 25, 2))
        Dim millii As Integer = CInt(Strings.Mid(lastlap, 28, 3))

        '現在のラップ時間に直前に記憶したラップ時間を引き、1回目から2回目のラップボタン押下までの経過時間を図る
        Dim answer = createtimespan(day, hr, min, sec, milli) - createtimespan(dayy, hrr, minn, secc, millii)
        Dim ansTS = answer.ToString("hh\:mm\:ss\:fff") 'ミリ秒3桁まで表示するように指定

        ListView1.Items.Add(CStr(lapcount), i)
        ListView1.Items(i).SubItems.Add(lap)
        ListView1.Items(i).SubItems.Add((ansTS).ToString)  'ラップ時間の表示

    End If
    lastlap = ListView1.Items(i).SubItems(1).ToString   '直前のラップタイムを記憶
End Sub

Private Function createtimespan(ByVal days As Integer, ByVal hours As Integer, ByVal minutes As Integer, _
                                ByVal seconds As Integer, ByVal milliseconds As Integer) As TimeSpan

    Dim elapsedTime As New TimeSpan(days, hours, minutes, seconds, milliseconds)

    Return (elapsedTime)

End Function

Конечный класс

0 голосов
/ 05 декабря 2018

Если честно, обычно плохая идея использовать объекты пользовательского интерфейса в качестве основного хранилища данных.Вам было бы гораздо лучше сохранить время разделения в List (Of TimeSpan) и рассчитать, исходя из этого время круга.

В моем примере я объявил несколько объектов класса для запуска кода.Вы можете адаптировать их по мере необходимости.

Dim sw As New Stopwatch
Dim lapcount As Integer = 1
Dim lastlap As Integer
Dim lapintervals As New List(Of TimeSpan)
Dim timeFormat As String = "hh\:mm\:ss\.fff"

Таким образом, в вашем событии нажатия кнопки у вас будет что-то вроде этого ...

Private Sub BtnLap_Click(sender As Object, e As EventArgs) Handles BtnLap.Click
    Dim ts As TimeSpan = sw.Elapsed
    lapintervals.Add(ts)
    AddTimeToListView(lapintervals.Count, lapintervals.Last)
    lapcount += 1
End Sub

И вы добавите информацию в свой ListView следующим образом

Private Sub AddTimeToListView(lapcount As Integer, lapsplit As TimeSpan)
    Dim lvItem As New ListViewItem(lapcount.ToString, lapcount)
    If lapcount = 1 Then
        lvItem.SubItems.Add(lapsplit.ToString(timeFormat))
        lvItem.SubItems.Add(lapsplit.ToString(timeFormat))
    Else
        lvItem.SubItems.Add(lapsplit.ToString(timeFormat))
        lvItem.SubItems.Add((lapsplit.Subtract(lapintervals(lapcount - 2))).ToString(timeFormat))
    End If
    ListView1.Items.Add(lvItem)
End Sub
...