-1

DateTimePicker を使用して dateTime 値を選択し、ゼロになるまでの時間を確認します。

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

timeInSeconds = (DateTimePicker1.Value.Subtract(System.DateTime.Now)).ToString
                'RichTextBox1.Text = RichTextBox1.Text + vbTab + timeInSeconds.ToString
                timeInSeconds = timeInSeconds.Substring(0, timeInSeconds.LastIndexOf("."))

End Sub

上記の RichTextbox は、約 30 秒ごとに 1 秒ずつ遅れていることを示しています。

23:59:47.4060217
23:59:46.3939638
23:59:45.3799058
23:59:44.3648477
23:59:43.3517898
23:59:42.3377318
23:59:41.3236738
23:59:40.3096158
23:59:39.2955578
23:59:38.2814998
23:59:37.2674418
23:59:36.2533838
23:59:35.2393258
23:59:34.2242677
23:59:33.2112098
23:59:32.1981518
23:59:31.1830938
23:59:30.1690358
23:59:29.1549778
23:59:28.1409198
23:59:27.1268618
23:59:26.1128038
23:59:25.0997458
23:59:24.0856878
23:59:23.0716298
23:59:22.0575718
23:59:21.0435138
23:59:20.0284558
23:59:19.0143978
**23:59:18.0013398
23:59:16.9872818**

そう使って

timeInSeconds = timeInSeconds.Substring(0, timeInSeconds.LastIndexOf("."))

23:59:18 から 23:59:16 になります

どうしてこんなことに?私は何を間違っていますか?その時ですか

(DateTimePicker1.Value.Subtract(System.DateTime.Now)).ToString

私が失っていることは起こりますか?

タイマーは1秒ごとに変化するように設定されています。

正しい結果を得るにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

0

テキストを直接追加するのではなく、結果をtmp文字列に連結してみてください。その後、tmpをtextbox1.textに割り当てます。

forloopの反復ごとにテキストボックスを変更して1バイトを16進数で表示する必要がある状況にありましたが、以前の方法に移行したときの結果は印象的でした。

試してみる。

コメントから:

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
  Dim timeInSeconds = (DateTimePicker1.Value.Subtract(System.DateTime.Now)).ToString 
  'RichTextBox1.Text = RichTextBox1.Text + vbTab + timeInSeconds.ToString
  timeInSeconds = timeInSeconds.Substring(0, timeInSeconds.LastIndexOf("."))
  TextBox1.Text &= timeInSeconds & vbNewLine
End Sub

このコードを1000ミリ秒のタイマーでテストしましたが、問題はありません。

于 2012-05-06T13:41:33.797 に答える
0

精度は、あなたがしていることと、同時に起こっている他のすべてのことによって変わります。毎回間隔をリセットすることで修正できます。現在、実行中のタスクが 1 秒より長い場合、これは機能しなくなりますが、可能な限り秒に近いティックが発生し続けるようになります。

   Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
     Timer1.Enabled = False

     'do your stuff here

     Timer1.Interval = 1000 - Date.Now.Millisecond
     Timer1.Enabled = True

  End Sub

私は通常、毎分または正時に何かを発生させたい場合に、この手法を使用します。

于 2012-05-06T15:29:49.117 に答える