2016-12-06 38 views
0

Windowsフォーム経由でC#で目覚まし時計アプリケーションを作成中です。これまでのところ、私は私の時間チェッカーのコードのこの非作業セクションを持っています。C# - 目覚まし時計 - 2回同じです

string alarm = this.dateTimePicker1.Text; 

if (DateTime.Now.ToString() == alarm) 
{ 
    MessageBox.Show("Alarm"); 
} 

のDateTimePickerを時間、分、秒に設定されています。上記のコードはメッセージボックスを表示していません。スニペットのどこに問題がありますか?また

:必要に応じてアラームクロック

+0

NineBerry、もっとコードは必要ありません。コードは問題を見るのに十分です。 – NikxDa

+0

あなたは、ユーザーが時間を入力すると、タイマーを開始することができますようにhttp://stackoverflow.com/a/7970754/2608451 –

答えて

2

あなたが軌道に乗るために、これを試してみてください:

時間と分を比較する必要があります。

private void CheckTime() 
{ 
    clock.Text = DateTime.Now.ToString("hh:mm:ss"); 
    date.Text = DateTime.Now.ToLongDateString(); 
    DateTime alarm = this.dateTimePicker1.Value; 
    DateTime currentTime = DateTime.Now; 
    if (alarm.Hour == currentTime.Hour && alarm.Minute == currentTime.Minute) 
    { 
     timer1.Enabled = false; 
     MessageBox.Show("Alarm"); 

    } 
} 
+0

本当に良いです、私の画面を引き継ぐたくさんのメッセージボックスを防ぐタイマーを停止します。 – EugeneProut

+1

これは非常に簡潔な答えですが、なぜそれが機能するのか説明はありません。 @ trickrider2002では、DateTime.Nowは秒を含む値(および使用方法によってはおそらくミリ秒)を与えるため、この回答が機能します。 2つの浮動小数点値を比較するのと同等です。意味のある比較が可能な値に丸める必要があります。時間と分に変換するとそれが実行されます。 – dviljoen

0

を作るの任意のより効率的な方法があり、以下のコードを変更します。私は文字列を比較することが、この問題を解決するための貧弱な方法であることを発見しました

DateTime alarm = this.dateTimePicker1.Value.Date; 
if (DateTime.Compare(DateTime.Now.Date, alarm) == 0) { 
    MessageBow.Show("Alarm"); } 
+2

DateTime.Compareを使用する場合、datetimesは同じタイムゾーンで構築する必要があることを忘れないでください。あなたの文化とUICultureの設定に注意してください。 –

+0

@GeckoIT非常に真実!文化とUIcultureの設定を指定する方法があります。私は彼が必要とする正確なコードを書くつもりはないが、人がそれを理解する方法を提供する(私は人々が最もよく学ぶ方法だと思う)。あなたは偉大な点を、間違いなく何かを警戒することをしました – peterpep

+0

私はあなたが '> 0'ではなく、 '== 0'であると思っています – smead

1

これは目覚まし時計なので、時間を含めて比較したいと思うでしょう。あなたが作品を使用しているのDateTimePickerは、あなたが比較する前にヌルの値をチェックする必要があるかもしれません方法に応じ

if(DateTime.Now.Ticks >= this.DateTimePicker1.Value.Ticks) 
{ 
    // Sound the alarm 
} 

:それは言った、あなたのDateTimeオブジェクトの.Ticks値を比較します。

+0

なぜティックを使用する必要があるのか​​分かりませんが、これで十分です: 'DateTime.Now> this.DateTimePicker1.Value' – smead

+0

TicksはDateTimeオブジェクトの基本値ですが、少し効率的ですが、あなたのやり方もうまくいき、OPのアプリケーションではその差はごくわずかです。 – Kevin

0

正確に一致するものを探しているという問題があります。代わりに、アラーム時間が過ぎたかどうかを調べる必要があります( "" = ")。また、文字列の比較は日付の時間には機能しません。あなたは、日付/時間を比較する必要があります。

 string alarm = this.dateTimePicker1.Value; 
     if (DateTime.Now() >= alarm) 
     { 
      MessageBox.Show("Alarm"); 
     } 
関連する問題