DateTimePickerで日付をブランクにするには?

解決


non  2004-07-22 00:21:54  No: 114941  IP: [192.*.*.*]

VB.NETのDateTimePickerで日付をブランクにすることができないので、
ユーザコントロールを作成したいのですが、DateTimePickerの上に
テキストボックスを張るにしても、テキストボックスには
MaskEditがないので、簡単に”/”をつけらず、
YYYY → MM → DD といった入力を私には実現できませんでした。

理想は、動きは、DateTimePickerでブランクを入力可にさせたいです。

どなたか、良いアイディアがありましたら伝授してください。

編集    削除
ファリンファリン  2004-07-22 02:23:13  No: 114942  IP: [192.*.*.*]

以前、私もこのような要件を求められ頭を悩ませていました。
>理想は、動きは、DateTimePickerでブランクを入力可にさせたいです。
その動きを作りましょう!

>ユーザコントロールを作成したいのですが、DateTimePickerの上に
>テキストボックスを張る
↑の方法で私は対処しました。
入力フィールドにTextBoxをかぶせたDateTimePickerです。
簡単な方法と、面倒な方法があります。(どちらもインチキですが)
○簡単な方法は、仕様ということにして"/"は手入力にさせる。
○面倒な方法は、正規表現などを用いてTextChangedイベントなどで
  書式を整えてあげる処理を埋め込むことです。
  (強制的に"/"の付加など)
  ブランクの時はその書式を整える処理を通らない様にすればOK。
  その他の処理としては、文字数(Encodingでバイト数チェック)
  半角数字のみ入力を可にする・日付として認識できるか?などの
  判断も入れる必要があります。(要件次第)
  蛇足ですが、入力値の判断後DateTimePickerに値をセットしないと
  カレンダーが同期が取れませんよ。

面倒な方はこればこるほどキリがないですが、私は後者の方法で
ユーザコントロール(偽DateTimePicker)を作りました。
簡単にやろうと思うと、適当なものしかできないかもです。

>どなたか、良いアイディアがありましたら伝授してください。
御参考になりましたか?^^;

編集    削除
魔界の仮面弁士  2004-07-22 09:24:58  No: 114943  IP: [192.*.*.*]

> VB.NETのDateTimePickerで日付をブランクにすることができないので、
OSが提供している「DateTimePickerコントロール」の仕様ですね。
VB.NETに限らず、VB6等でも、同じ制限があります。

このコントロールの仕様では、データベースでいう所の NULL のような、
「日付無し」の状態を再現するには、チェックボックスが使われます。
(VB.NET版では、ShowCheckBoxプロパティとCheckedプロパティです)

…求めておられる画面イメージとは、若干異なるかも知れませんけれども。

編集    削除
non  2004-07-22 19:27:50  No: 114944  IP: [192.*.*.*]

ファリンファリンさん、魔界の仮面弁士さん、アドバイスありがとうございました。
勉強になりました。

編集    削除