.NET Framework の Windows Form 用の MonthCalendar コントロールが小さくて見づらいと思い Visual Studio 2008 で Calendar コントロールを作ってみた。
理由は他にもあって
- 文字が小さいので太字の日付が判りにくい(特に目が悪い人には)
- Web の Calendar コントロールは見やすいのになぁ
- 勉強のため
- 自作のアプリケーションで使う(単一の日付が選択できればいい)
ってなことでこんな感じで作ってみた。
・開発時のデザイン画面
Web の Calendar のように ひとつひとつの日付をセルとして扱えるようにしてみました。
日付部分は TableLayoutPanel を配置して 6行 7列に設定。
日付のセルを表すクラスとして DayCell クラスを作成し、日付と Label をメンバに持つようにしてます。
Calendar クラス側で 42個の DayCell をプライベートメンバに持っていて、コンストラクタ内でインスタンスを作成して DayCell の Label をTableLayoutPanel に追加するようにしてます。
・Sample プロジェクトを作成して Windows Form に配置
左が MonthCalendar で右が自作の Calendar。(どちらも配置しただけの状態)
デザイナでのプロパティはこんな感じ。
MonthCalendar との主な違いです。
- 選択できるのは単一の日付(表示も単月)
- 両サイドのボタンをクリックすることで 1年分の移動ができる
- 年月と選択日を和暦(年号)で表示するよう設定できる
- データが登録されている日付を太字だけでなく文字色や背景色を設定して表示できる
3 についてはデザイナ上でも設定できます。
4 については実行するとこんな感じになります。
※ 3 の倍数と 3 のつく数字の時だけアホに にデータがあるとしてます(今日以前で)
左は太字 + 文字色を赤に設定、右はそれ + 背景色を SkyBlue に設定して実行したところです。
MonthCalendar は BoldedDates プロパティで設定するけど 自作の Calendar は SetUnifiedDates メソッドで設定。
SetUnifiedDates メソッドは Calendar 唯一のパブリックメソッドで 3 つのオーバーロードがあります。
Public Overridable Overloads Sub SetUnifiedDates(日付のリスト, FontStyle 列挙体)
Public Overridable Overloads Sub SetUnifiedDates(日付のリスト, FontStyle 列挙体, 文字色)
Public Overridable Overloads Sub SetUnifiedDates(日付のリスト, FontStyle 列挙体, 文字色, 背景色)
動作的なところやクラスの他のメンバについては気が向いたら書きま~す。