QA@IT

【.NET/Inputman6.0J】日付コントロールのラッパークラスの日付初期値を空白にしたい

3209 PV

お世話になります。

VS2005 VB.NET GrapeCity社のInputman6.0Jを使用して開発しております。

Inputmanのコントロールのラッパーを作成し、開発を進めておりますが、
表題にも在りますとおり、コントロールの初期表示を空白にしたいがうまくいかずご相談させて頂きたく思います。

【事象】
デザイナからコントロールを配置したときに、自動的にValueがセットされるが、
このときセットされる値が「0」がセットされてしまい(表示上は0001/01/01)空白にすることができません。

【ここまで試したこと】
GrapeCityのナレッジベースにありますとおり、継承クラスを作成するとき、
デザイナへの値の生成をコントロールすることによって、デザイナからの配置時の初期表示を変更することができます。
https://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=28200
上記の、
https://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=29280
にて実装を進めております。

・初期値の設定についての補足
従来の5.0Jまでは、DefaultValue?と書式で初期表示のブランク表示が実現できたそうです。
6.0Jになり、DefaultValueの代替機能として、RecommendedValueにっ取って代わったようです。
ただし、RecommendedValueの値にNothingを設定しても、デザイナ上に配置すると、ゼロが設定されてしまいます。

加え、AlternateText.DisplayNull.Text = " " も設定しております。
(当然、値がNothingであれば、上記を設定すれば空白になるはずなのですが・・・。
  ゼロが設定されているため、上記が適用されない状態になっております。)

ただし、デザイナ上でプロパティよりValueに空白を設定する(削除する)と、初期表示はブランクにすることができてしまう。
⇒仕組み的にはできるはず・・・と思っています。

ナレッジベースにありますコーディングのとおり、書式についてはyyyy/MM/ddを設定済みです。

【解決したい課題】
デザイナに配置したとき、Valueに0が設定されることを回避したい。(単純に見た目上、ブランクがセットされていればOK)

【案?】
Formのロード時にラッパークラスの値にNothingを放り込んでやるとか・・?(会社から撤退してしまったので明日・・)

何か解決策をご存知の方、ご教示願えませんでしょうか?

以上、よろしくお願いいたします。

【追記】
Date型のNothingはDate型0と同義である、ことは承知しております。
ですが、コントロールへの設定上は、Nothingと0で違う挙動をしているように思えます・・。(確認します。)

回答

***.Value = nothing ではどうでしょうか?

編集 履歴 (0)

InputManの環境は当方にないのですが

まず

Dim a = String.Format("{0:yyyy/MM/dd}", CDate(Nothing))

とした場合のaは0001/01/01になり

CDate(Nothing).Year => 1
CDate(Nothing).Month => 1
CDate(Nothing).Day => 1
CDate(Nothing).Hour => 0
CDate(Nothing).Minute => 0
CDate(Nothing).Second => 0

であり

new Date(1,1,1,0,0,0) = Nothing

はTrueとなります。
つまりDateのNothingは西暦1年1月1日0時0分0秒
なのです。

そして

Dim a = String.Format("{0:yyyy/MM/dd}", Nothing)

はエラーとなり

Dim a = String.Format("{0:yyyy/MM/dd}", DBNull.Value)

は空文字列となります。

ということで
DBNull.Valueを設定可能であればうまくいくかもしれません。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。