| DateEditの和暦対応 |
|
|
|
DateEditはDevExpress社の.Net Framework向けコンポーネントスイート"DXperience"のエディタライブラリ"XtraEditors"に含まれる日付エディタです。いわゆるドロップダウンカレンダーコントロールみたいなものです。 これをつかうと、キーボードから直接、またはドロップダウンカレンダーからのマウスクリックで、エンドユーザーに日付を入力してもらうことができます。 ところが(というか、当然なのですが)このコントロールは日本製ではないので、デフォルトの状態では和暦の日付("平成22年7月22日"とか、"h22/7/22"とか)をキーボードで入力することができません。これをなんとか和暦で入力できるようにしたので、早速メモ。 まずは普通にDateEditをコントロールに配置します。そのままVisualStudioでデバッグモードで実行してキーボードから"h22/7/22"と入力しようとすると、いきなり受け付けてくれません。これは入力マスク(DateEdit.Properties.Mask)が西暦のフォーマットとしてセットされているからです。 とりあえず、入力マスクを無効に(VisualStudioのプロパティグリッド上でDateEdit1.Properties.Mask.MaskTypeをNoneにセット)します。
これでDateEditのテキスト部分に「どんな」文字でも入力できるようになります。
そして次に「入力された和暦での日付を西暦で理解してくれるようにする」方法を考えます。おそらくParseEditValueイベントを使って和暦を西暦に変換するコードを書けばいいんだろうなぁ...と思いながらおもむろに「h22/7/22」と入力すると、なんと、うまく認識してくれました。(ドロップダウンボタンをクリックすると、2010年7月22日が選択されていることを確認することができます。「平成22年7月22日」と入力した場合も同様にうまくいくようです。) あとはここに正しく「日付」のみが入力されるように仕立てていくだけです。 まず入力マスクを編集して、西暦または和暦(h22/7/22のような)での日付入力形式での入力を受け付けるようにします。具体的には
EditMaskが一見すごいことになっていますが、西暦に加えて和暦を示すm,t,s,hを入力できるように(MaskEditorのPredefined masksを参考にして)記述しています。
ここまでで西暦または和暦(h22/7/22のような)での日付入力ができるようになります。 ついでに入力された日付が(西暦ではなく)和暦で表示されるようにします。FormatEditValueイベントハンドラにコードを記述して、和暦で表示するようにします。(一部抜粋) 以上でほぼ和暦対応ができました。(実際には上記のコードにくわえて、「日付がnullの場合」と、「和暦に変換できない西暦が入力された場合」の処理を追加する必要があります。) あとはDateEditのvalidatingイベントハンドラで不正な日付(たとえば、h22/2/30のような)が入力された場合に対応するコードを書いて(説明は省略)、完成です。 欲を言うと、マウスホイールの回転や矢印キーで年・月・日を増減できるようにしたかったのですが、とりあえずここまでで良しとしました。 |





