2

時、分、秒を開始します

そして、それを合計ミリ秒に変換します。

そして、私がやっていることは、Elapsed MilliSeconds から Total MilliSeconds を差し引くことです

すなわちelms = cms - e.Milliseconds

(評価されたミリ秒 = 計算されたミリ秒 - Stopwatch.elapsedMilliseconds)

次に、評価されたミリ秒を HH:MM:SS:MS 形式に変換します。

しかし、何らかの論理エラーが原因で機能していません。そのため、支援が必要です。少し助けてくださいここに私のコードがあります:

        Dim dd As Integer = 0
        Dim mm As Integer = 0
        Dim hh As Integer = 0
        Dim ss As Integer = 0
        Dim ms As Integer = 0
        Dim cms As Long = 0
        Dim elms As Long = 0

    Dim stopwatch As System.Diagnostics.Stopwatch = New System.Diagnostics.Stopwatch
    Dim dt As DispatcherTimer = New DispatcherTimer

    Private Sub StartButton_Click(sender As Object, e As RoutedEventArgs) Handles StartButton.Click

                hh = Hours.Text * 60 * 60 * 1000
                mm = Minutes.Text * 60 * 1000
                ss = Seconds.Text * 1000
                cms = hh + mm + ss
                hh = mm = ss = 0
                Start()
    End Sub

    Private Sub Start()

                dt.Interval = New TimeSpan(0, 0, 0, 0, 10)
                AddHandler dt.Tick, AddressOf ontimertick
                stopwatch.Start()
                dt.Start()

            End If
    End Sub

    Private Sub ontimertick()


            Dim e As New TimeSpan
            e = stopwatch.Elapsed

                elms = cms - e.Milliseconds
                ss = ((elms Mod (1000 * 60 * 60)) Mod (1000 * 60)) \ 1000
                mm = (elms Mod (1000 * 60 * 60)) \ (1000 * 60)
                hh = elms \ (1000 * 60 * 60)
                elms = elms Mod 1000

                MicroSeconds.Text = elms.ToString("00")
                Seconds.Text = ss.ToString("00")
                Minutes.Text = mm.ToString("00")
                Hours.Text = hh.ToString("00")
    End Sub
4

2 に答える 2

0

エラーはここにあります:

ss = ((elms Mod (1000 * 60 * 60)) Mod (1000 * 60)) \ 1000
mm = (elms Mod (1000 * 60 * 60)) \ (1000 * 60)
hh = elms \ (1000 * 60 * 60)
elms = elms Mod 1000

それは違いない:

ss = ((elms Mod (1000 * 60 * 60)) Mod (1000 * 60)) \ 1000
 elms=elms-(ss*1000)
mm = (elms Mod (1000 * 60 * 60)) \ (1000 * 60)
 elms=elms-(mm*1000)
hh = elms \ (1000 * 60 * 60)
 elms=elms-(hh*1000)
elms = elms Mod 1000

わかった?

于 2012-09-20T17:42:49.380 に答える
0

あなたはそれを複雑にしすぎています。必要なのは、合計時間をTimeSpanオブジェクトとして保存することだけです。StopWatch.Elapsed次に、それも であるため、そこから時間を差し引くことができますTimeSpan。次に、TimeSpan計算の結果のオブジェクトに残り時間が含まれます。例えば:

' Get the total desired time for count down
Dim total As New TimeSpan(Integer.Parse(Hours.Text), Integer.Parse(Minutes.Text), Integer.Parse(Seconds.Text))

' Later, get the time left and display on screen
Dim timeLeft As TimeSpan = total - stopwatch.Elapsed
Hours.Text = timeLeft.TotalHours
Minutes.Text = timeLeft.TotalMinutes
Seconds.Text = timeLeft.TotalSeconds

Integer.Parse明らかに、テキスト ボックスには数値以外の値が含まれている可能性があるため、そのように呼び出すだけでは安全ではありません。それを処理するコードを追加する必要があります。たとえば、無効なエントリが作成された場合にデフォルトをゼロにしたい場合は、次のようにすることができます。

Dim totalHours As Integer
Dim totalMinutes As Integer
Dim TotalSeconds As Integer
Integer.TryParse(Hours.Text, totalHours)
Integer.TryParse(Minutes.Text, totalMinutes)
Integer.TryParse(Seconds.Text, totalSeconds)
Dim total As New TimeSpan(totalHours, totalMinutes, totalSeconds)

または、検証エラー メッセージを表示する場合は、次のようにします。

Dim total As TimeSpan
Try
    total = New TimeSpan(Integer.Parse(Hours.Text), Integer.Parse(Minutes.Text), Integer.Parse(Seconds.Text))
Catch ex As FormatException
    MessageBox.Show("Entries must be numeric.")
End Try
于 2012-09-20T17:47:22.267 に答える