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

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

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

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

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

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

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

DateTime? dateTime;

private void Form1_Load(object sender, EventArgs e)
{
 //イベントの追加
 this.dateTimePicker1.ValueChanged += new System.EventHandler(this.dateTimePicker1_ValueChanged);
 this.dateTimePicker1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dateTimePicker1_KeyDown);

 //今日の日付を設定した場合
 //dateTime = DateTime.Today;
 //setDateTimePicker(dateTime);

 //nullを設定した場合
 dateTime = null;
 setDateTimePicker(dateTime);
}

private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e)
{
 if (e.KeyData == Keys.Delete)
 {
 //Deleteキーが押されたら、dateTimeにnullを設定してdateTimePicker1を非表示に
 dateTime = null;
 setDateTimePicker(dateTime);
 }
}

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
 //dateTimePicker1の値が変更されたら表示する
 dateTime = dateTimePicker1.Value;
 setDateTimePicker(dateTime);
}

private void setDateTimePicker(DateTime? datetime)
{
 if (datetime == null)
 {
 //DateTimePickerFormat.Custom にして、CostomFormatは半角の空白を入れておくと、日時が非表示になる。
 dateTimePicker1.Format = DateTimePickerFormat.Custom;
 dateTimePicker1.CustomFormat = " ";
 }
 else
 {
 //フォーマットを元に戻して、値をセットする。
 dateTimePicker1.Format = DateTimePickerFormat.Long;
 dateTimePicker1.Value = (DateTime)datetime;
 }
}

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

日付が非表示になります。 日付を設定
  • このエントリーをはてなブックマークに追加