C# DateTimePickerの値を非表示にする。

Form1にDateTimePickerを配置 C#

VisualStudip(C#)で、DateTimePickerをそのまま使うと、nullを入れられません。

なので、常に何かの値が入っているのですが、それは仕方がないとして、せめて非表示にしたい場合に次のようにします。

まず、フォームにDateTimePicker、dateTimePicker1を配置しているとします。
Form1にDateTimePickerを配置

DateTimePickerのvalueには、Nullが入らないので、代わりにDateTime? dateTime を値の入れ物として用意します。DateTime型もNull非許容型なので、?をつけてNull許容型にします。

dateTimePicker.Format の値を DateTimePickerFormat.Customにして、CustomFormat に半角の空白を入れると、日付が非表示になるので、これを利用します。

カレンダーで日付が設定されるなど数値が変更になったときには、イベントを発動して日付を表示させます。
そして、Deleteキーが押された時はdateTime変数をnullにして、DateTimePickerの数値を非表示にします。

こんな感じで。ちゃんと日付が非表示になりますし、日付を設定すれば、表示されます。

日付が非表示になります。 日付を設定

追記:

カレンダー表示が意図せず消えてしまう

表示されたカレンダーの◀や▶をクリックすると、ValueChanged イベントのお陰で、dateTimePicker1_ValueChanged が動いてしまい、カレンダーダイアログが閉じられてしまうので、無理やりですが、dateTimePicker1_MouseDown のところで、マウスが押されたイベントを受け取ったときに、DateTimePikerの領域外であれば、消えてしまったカレンダーダイアログをもう一度表示させるようにします。

DateTimePickerには、プログラムからカレンダーダイアログをドロップダウンする方法がないそうで、代わりにカーソルキーの↓を送信することにします。

参考:http://www.atmarkit.co.jp/fdotnet/dotnettips/893dtpickercal/dtpickercal.htm

タイトルとURLをコピーしました