2017-04-03 4 views
0

datetimeが今日の日付よりも大きい場合、datetimepickerの値を変更しようとしました。ValueChangedイベントハンドラ内でDateTimePickerの値を変更する方法

私は値を変更したこと、変更値の後にメソッドを記述しようとしたが、私は今日の日付に日付の値を変更するためには、ループを作っています。

この方法はどのように修正できますか?

private void dateTimePickerUntil_ValueChanged(object sender, EventArgs e) 
{ 
    MessageBox.Show(dateTimePickerUntil.Value.ToString()); 
    if(dateTimePickerUntil.Value > DateTime.Now.Date) 
    { 
     dateTimePickerUntil.Value = DateTime.Now.Date; 
     untildate = Convert.ToDateTime(dateTimePickerUntil.Value.ToShortDateString()); 
    } 
    else 
    { 
     untildate = Convert.ToDateTime(dateTimePickerUntil.Value.ToShortDateString()); 
    } 
} 
+1

さて、問題ではありません。無駄なMessageBox.Show()呼び出しを削除するだけです。 –

+0

私はそれがまだ動作することを知っているが、それは正しい方法ではない – Nadav

答えて

0
がループをブレーク

は( dateTimePickerUntil値の変化が、それはこの方法で繰り返したときの答えは、trueの場合ならばループが起こる):あなただけ dateTimePickerUntil.Value untildate != dateTimePickerUntil.Valueかどうかを確認する必要があります。方法は untildateを最初に変更することで、次の ValueChangedイベントが発生する前に untildateに適切な値が既に含まれています。

private void dateTimePickerUntil_ValueChanged(object sender, EventArgs e) 
{ 
    if (dateTimePickerUntil.Value != untildate) 
    { 
     MessageBox.Show(dateTimePickerUntil.Value.ToString()); 
     if (dateTimePickerUntil.Value > DateTime.Today) 
     { 
      untildate = DateTime.Today; // Set first, so we can compare on the next event. 
      dateTimePickerUntil.Value = DateTime.Today; 
     } 
     else 
     { 
      untildate = dateTimePickerUntil.Value;     
     } 
    } 
} 
関連する問題