以下のコードは、dtpWeek1 で 2012 年 8 月 6 日を選択した場合、dtpWeek2 を 8/13 に、dtpWeek3 を 8/20 に、などと移動することを期待しています。
ただし、dtp1 で何を選択しても、dtp2 は月の最初から 1 週間後に移動します (IOW、常に 8 日です)。残りの DatePickers (dtp3 から dtp9 まで) は、前のものより 1 週間遅れているという点で正常に動作しますが、dtp1 で選択したものに基づくべきものではありません。常に 15 日、22 日、および29 日 (ほとんどの 2 月を除く)。
別の月に移動すると DisplayDate が /1/ に変更されますが (これは完全に非論理的/驚くべきことではありません)、その月内の特定の日付 (6 日など) をクリックすると無視されます。
間違ったイベントを使用していますか? 間違った方法論?
private void dtpWeek1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
dtpWeek2.DisplayDate = dtpWeek1.DisplayDate.AddDays(7);
dtpWeek3.DisplayDate = dtpWeek1.DisplayDate.AddDays(14);
dtpWeek4.DisplayDate = dtpWeek1.DisplayDate.AddDays(21);
dtpWeek5.DisplayDate = dtpWeek1.DisplayDate.AddDays(28);
dtpWeek6.DisplayDate = dtpWeek1.DisplayDate.AddDays(35);
dtpWeek7.DisplayDate = dtpWeek1.DisplayDate.AddDays(42);
dtpWeek8.DisplayDate = dtpWeek1.DisplayDate.AddDays(49);
// TODO: Only add week 9 if it is within the month following the first month
dtpWeek9.DisplayDate = dtpWeek1.DisplayDate.AddDays(56);
}
さらに、DisplayDates がプログラムで割り当てられているすべての DatePicker コンポーネントは、プロパティ名 (DisplayDate) に基づいて「日付の選択」を表示し続けます。実際に DisplayDate を表示すると思います。なぜ彼らはしないのですか?実際にそうさせるにはどうすればよいですか?それらをクリックしてドロップダウンすると、上記の日付 (8 日、15 日など) が表示されますが、なぜ「光」をそのように隠しているのでしょうか?
最後に、補足として、代わりにこの方法でコードを書くことの影響は何でしょうか(私はこれが遅くなるか、信頼性が低いかもしれないと考えています):
private void dtpWeek1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
dtpWeek2.DisplayDate = dtpWeek1.DisplayDate.AddDays(7);
dtpWeek3.DisplayDate = dtpWeek2.DisplayDate.AddDays(7);
dtpWeek4.DisplayDate = dtpWeek3.DisplayDate.AddDays(7);
dtpWeek5.DisplayDate = dtpWeek4.DisplayDate.AddDays(7);
dtpWeek6.DisplayDate = dtpWeek5.DisplayDate.AddDays(7);
dtpWeek7.DisplayDate = dtpWeek6.DisplayDate.AddDays(7);
dtpWeek8.DisplayDate = dtpWeek7.DisplayDate.AddDays(7);
dtpWeek9.DisplayDate = dtpWeek8.DisplayDate.AddDays(7);
}
コードを次のように変更します。
dtpWeek2.SelectedDate = dtpWeek1.DisplayDate.AddDays(7);
dtpWeek3.SelectedDate = dtpWeek1.DisplayDate.AddDays(14);
dtpWeek4.SelectedDate = dtpWeek1.DisplayDate.AddDays(21);
dtpWeek5.SelectedDate = dtpWeek1.DisplayDate.AddDays(28);
dtpWeek6.SelectedDate = dtpWeek1.DisplayDate.AddDays(35);
dtpWeek7.SelectedDate = dtpWeek1.DisplayDate.AddDays(42);
dtpWeek8.SelectedDate = dtpWeek1.DisplayDate.AddDays(49);
dtpWeek9.SelectedDate = dtpWeek1.DisplayDate.AddDays(56);
日付が表示されない問題を解決しました。ただし、8/6 ではなく 8/1 を選択したかのように動作します。値は次のとおりです。
8/6
8/8
8/15
8/22
8/29
etc.