DTPickerコントロールで日付を選択するのですが、
手入力で日付を設定したときに、
たとえば、「2004/15/02」というようにあり得ない日付を設定したとき
エラーメッセージを表示したいのですが、
カーソルを移動した瞬間に自動的に「2004/06/02」というような
正常な値に戻ってしまいます。
ValidateやlostFocusなどでカーソルを移動したことを察知して
処理を行おうとしたのですがどうしても捕まえることができません。
すみませんがよろしくお願いします。
CustomFormatプロパティに適当なフォーマット(yyy/mm/ddなど)を入力し
Validateイベント等で日付のチェックを行えばよいかと
CustomFormatには「yyyy/MM/dd」と設定してある状態で
ValidateやlostFocusなどのイベントでチェックを行おうとしたのですが、
Validateに処理が移った段階ですでにDTPickerには
正常な値に修正されて表示されてしまっていました。
その値が修正される前にチェックをしたいのですが
どうしても方法がわかりません。
あと、書き忘れていましたが
VB6.0です。
CustomFormat にしても日付型を使っている以上自動修正されるみたい…?
>カーソルを移動した瞬間に自動的に
だけでなく、入力後、一定時間の経過でも勝手に変わるみたいです。
その際、デフォルトで用意されているイベントはどれも走らなかったです。
Change イベントも関係ないし、KeyDown などで取っても…結局自動修正を
止めれないので意味ありませんし…。
通常の処理では無理なんじゃないでしょうか?
yyyy/mm/ss
…にすれば59までなら入力可能ですが…w
あとは他のコントロールを組み合わせて作るか、
ローカルフックやサブクラス化とかいう話になってくるか、
↓のAPIを使った方法を利用させてもらえば入力自体できなくなります。
http://www.mitene.or.jp/~sugisita/vb6_cmctl.html
書き忘れていましたが、もちろんFormatプロパティもdtpCustomに
していますよね?
少なくとも私の環境では勝手に戻らないですが。
うむー。
Format プロパティは dtpCustom に設定してますー。
exe とかも作ってみましたが…同じでした。
月に88とか入力して1秒くらい経つと1〜12の以前の Value
に戻ってしまいます。日も同様。
環境は[Win2000Pro(Sp4)][VB6.0(Sp5)]
Microsoft Windows Common Contorols-2 6.0(SP4)
MSCOMCT2.OCX(ファイルバージョン6.0.88.4)
を使用してます。
すみません。確認不足でした。
私の環境Microsoft Windows Common Contorols-2 6.0(SP6)でも
月に88と入れると時間か次のフィールドに移ることによって戻ります
だだし59までの値だとそのまま残るみたいです。
DTPickerにこだわらなければMaskEditコントロールで同様の機能が
できますね。
> だだし59までの値だとそのまま残るみたいです。
…多分それ M が小文字なので minute(分)を表示してます。
月は大文字(M)にしないといけないみたいです。
…最初オイラも同じ事しましたw。
なんか
http://support.microsoft.com/default.aspx?scid=kb;JA;272532
この辺の問題とかで無効な日付をデータベースに登録
しないように強制されてる感がひしひしと…
とろさん特攻隊長まるるうさんありがとうございました。
> この辺の問題とかで無効な日付をデータベースに登録
しないように強制されてる感がひしひしと…
DTPickerそのものには手が出せないようですね。
現状のDTPickerの動きがはっきりしてよかったです。