5

私は、人々がC#の部門の注文を「予約」するのに役立つプログラムを作成しています。彼らは異なる月に複数の日付を選択できる必要があります。

日付をクリックしてから、別の日付をクリックして2つの間のすべての日付を選択し、クリックを制御して単一の選択/選択解除を実行できるようにするために、この機能を使用したいと思います。前月にクリックしたすべての日付を保持したまま、月間を移動できる必要があります。これにより、選択した日付の概要を簡単に把握できます。

これを行うための最良の方法は何ですか?Visual Studioのデフォルトの月間カレンダーを使用する必要がありますか、それとももっと柔軟な月間カレンダーがありますか?

4

3 に答える 3

8

日付のクリックを検出し、太字の日付からクリックされた日付を追加または削除することで機能させることができます。MonthCalendar の MouseDown イベントを実装します。

private void monthCalendar1_MouseDown(object sender, MouseEventArgs e) {
  MonthCalendar.HitTestInfo info = monthCalendar1.HitTest(e.Location);
  if (info.HitArea == MonthCalendar.HitArea.Date) {
    if (monthCalendar1.BoldedDates.Contains(info.Time))
      monthCalendar1.RemoveBoldedDate(info.Time);
    else 
      monthCalendar1.AddBoldedDate(info.Time);
    monthCalendar1.UpdateBoldedDates();
  }
}

これに関する 1 つの問題は、安いモーテルのようにちらつきます。そのための修正はありません。

于 2009-11-15T23:19:06.267 に答える
2

WinForms MonthCalendar は、Start から End までの範囲の選択をサポートしていますが、Ctrl を使用した個々の日付の (選択解除) はサポートしていません。そのため、要件を満たしていないようです。

簡単なメモ: MonthCalendar のサイズを変更すると、より多くの月が表示されます。あなたに実用的な解決策を与えるかもしれないnobugzの答えと一緒に。

于 2009-11-15T21:14:57.013 に答える
0

WPFを使用していると仮定して...

シンプルな ListBox を作成し、ItemsSource プロパティを Calendar の SelectedDates プロパティにバインドすることをお勧めします。ユーザーがカレンダーから日を選択または選択解除すると、リストに追加またはリストから削除されます。

さらに、DateSpan クラスと ValueConverter を作成して、一連の日付を DateSpan クラスにグループ化できます。次に、コンバーターを SelectedDates プロパティに適用して、ユーザーが Shift-Select を使用すると、一連の日付ではなく日付範囲が表示されるようにすることができます (これは悪いことだと仮定します)。ロジックはそれほど複雑ではありません。

サードパーティのツールはたくさんありますが、どのコントロールを使用しても、コアの問題は残ります。選択したすべてのアイテムをユーザーに認識させたいのですが、同時に選択された日。私が考えることができる最良の答えはリストです。

于 2009-11-15T21:13:44.270 に答える