2016-06-14 16 views
0

私は時計プログラムを書いています。私は何かに悩まされています。08:45:00から10:45:00までの間

私に現在の時間を示すラベル(TVGentTimeLabel)があります。私は何をしたいか

時間は午前8時45分00秒と10時45分00秒の間にあるときの時間が10時45分01秒と午前23時59分の間にあるとき、私の時計は

赤です。クロックは緑と他の白よりも、59、

これは私のコードは以下のようになります。

Sub Timertijd_Tick(sender As Object, e As EventArgs) Handles Timertijd.Tick 

     TVGentTimeLabel.Text = TimeOfDay.ToString("HH:mm:ss") 

     If TVGentTimeLabel.Text = "08:45:00" Or TVGentTimeLabel.Text = "08:45:01" Then 
      TVGentTimeLabel.ForeColor = Color.Red 
     ElseIf TVGentTimeLabel.Text = "10:45:01" Or TVGentTimeLabel.Text = "10:45:02" Then 
      TVGentTimeLabel.ForeColor = Color.Green 
     ElseIf TVGentTimeLabel.Text = "00:00:01" Or TVGentTimeLabel.Text = "00:00:02" Then 
      TVGentTimeLabel.ForeColor = Color.White 
     End If 

End Sub 

プログラムは、異なる時刻に開始されたときである私が今持っている問題は、それが色が使用されます通常通り(私の場合はブラック)

助けてもらえますか

+2

を動作するはずです。そこのコードは、あなたが望むものの2〜3秒以内にチックが発火すると想定しています。 – Plutonix

+1

はい、時刻を文字列として評価しないでください。値を 'DateTime'として保存し、代わりにその値を比較してください。 –

+0

私には解決策がすでにあなたの質問のように聞こえます:* "...そして他の白" * ...そうすれば、ElseIfをElseに変更することであなたの問題を解決することができます。 – Filburt

答えて

2

あなたが現在持っているものに基づいて、これはあなたが文字列よりタイムスパンを使用して評価したほうが良いと思います

Private Sub Timertijd_Tick(sender As Object, e As EventArgs) Handles Timertijd_Tick  

     Dim d As Date = TimeOfDay 
     TVGentTimeLabel.Text = d.ToString("HH:mm:ss") 

     If d >= #8:45:00 AM# And d <= #10:45:00 AM# Then 
      TVGentTimeLabel.ForeColor = Color.Red 
     ElseIf d >= #10:45:01 AM# And d <= #11:59:59 PM# Then 
      TVGentTimeLabel.ForeColor = Color.Green 
     Else 
      TVGentTimeLabel.ForeColor = Color.White 
     End If 

    End Sub 
+0

これを24-Hモードで使用できますか? –

+0

'#11:59:59 PM# 'を' New Date(1,1,1,3,5,5,9)'に置き換えることができます。 –

+0

私はすでにそれを見つけました:)私は#20:00:00#を使用しました)AMまたはPMの必要はありません –

2

コードはタイマーが1秒または2秒で正確にチェックされていると思いますが、コードではそれを処理する方法がありません。彼らは一定の時間をかけて通過したときに

Dim ts = DateTime.Now.TimeOfDay 

    Dim tsA = New TimeSpan(8, 45, 0) ' note: AM. add 12 for PM traps 
    Dim tsB = New TimeSpan(10, 45, 0) 
    Dim tsC = New TimeSpan(12, 59, 59) 

    If ts >= tsA AndAlso ts <= tsB Then 
     ' red 
    ElseIf ts > tsB AndAlso ts <= tsC Then 
     'green 
    Else 
     'white 
    End If 
0

はあなたが唯一のラベルの色を設定している:あなたは回を評価しているので、あなたはTimeSpan、ない文字列を評価する必要があります。起動すると、IF structuresのいずれかを通過するまで黒色になります。文字列の代わりにtimeOfDayを日付として処理してください。

Sub Timertijd_Tick(sender As Object, e As EventArgs) Handles Timertijd.Tick 

    If DateTime.Now.TimeOfDay >= new TimeSpan(8,45,0) AndAlso DateTime.Now.TimeOfDay <= New TimeSpan(10,45,0) Then 
     TVGentTimeLabel.ForeColor = Color.Red 
    ElseIf DateTime.Now.TimeOfDay >= new TimeSpan(10,45,0) AndAlso DateTime.Now.TimeOfDay <= New TimeSpan(23,59,59) Then 
     TVGentTimeLabel.ForeColor = Color.Green 
    ElseIf DateTime.Now.TimeOfDay >= new TimeSpan(0,0,0) AndAlso DateTime.Now.TimeOfDay <= new TimeSpan(8,44,59) 
     TVGentTimeLabel.ForeColor = Color.White 

End Sub 
関連する問題