0

以下のコードは、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.
4

1 に答える 1

1

わかりました、コメントを回答に変えるには:SelectedDateプロパティは次のように使用する必要があります:

dtpWeek2.SelectedDate = dtpWeek1.SelectedDate.Value.AddDays(7);

SelectedDateDateTime?(nullable)であるため、.Value右側にあります。

于 2012-07-09T21:36:00.550 に答える