VB.NETのDateTimePickerで日付をブランクにすることができないので、
ユーザコントロールを作成したいのですが、DateTimePickerの上に
テキストボックスを張るにしても、テキストボックスには
MaskEditがないので、簡単に”/”をつけらず、
YYYY → MM → DD といった入力を私には実現できませんでした。
理想は、動きは、DateTimePickerでブランクを入力可にさせたいです。
どなたか、良いアイディアがありましたら伝授してください。
以前、私もこのような要件を求められ頭を悩ませていました。
>理想は、動きは、DateTimePickerでブランクを入力可にさせたいです。
その動きを作りましょう!
>ユーザコントロールを作成したいのですが、DateTimePickerの上に
>テキストボックスを張る
↑の方法で私は対処しました。
入力フィールドにTextBoxをかぶせたDateTimePickerです。
簡単な方法と、面倒な方法があります。(どちらもインチキですが)
○簡単な方法は、仕様ということにして"/"は手入力にさせる。
○面倒な方法は、正規表現などを用いてTextChangedイベントなどで
書式を整えてあげる処理を埋め込むことです。
(強制的に"/"の付加など)
ブランクの時はその書式を整える処理を通らない様にすればOK。
その他の処理としては、文字数(Encodingでバイト数チェック)
半角数字のみ入力を可にする・日付として認識できるか?などの
判断も入れる必要があります。(要件次第)
蛇足ですが、入力値の判断後DateTimePickerに値をセットしないと
カレンダーが同期が取れませんよ。
面倒な方はこればこるほどキリがないですが、私は後者の方法で
ユーザコントロール(偽DateTimePicker)を作りました。
簡単にやろうと思うと、適当なものしかできないかもです。
>どなたか、良いアイディアがありましたら伝授してください。
御参考になりましたか?^^;
> VB.NETのDateTimePickerで日付をブランクにすることができないので、
OSが提供している「DateTimePickerコントロール」の仕様ですね。
VB.NETに限らず、VB6等でも、同じ制限があります。
このコントロールの仕様では、データベースでいう所の NULL のような、
「日付無し」の状態を再現するには、チェックボックスが使われます。
(VB.NET版では、ShowCheckBoxプロパティとCheckedプロパティです)
…求めておられる画面イメージとは、若干異なるかも知れませんけれども。
ファリンファリンさん、魔界の仮面弁士さん、アドバイスありがとうございました。
勉強になりました。