日付

Q1 10
時間だけを「H24:MI」の形式で表示・編集したい 
[内容]
ValueTypeをDate型に指定した、FlexTextBoxオブジェクトのフォーマットに「HH24:MI」をしても、時間入力時は年月日時分を入力しないと正しく時間の表示が行われない、時間だけを編集して表示させるにはどうしたらよいか
A1 10

[解決方法]
TextBoxやFlexTextBoxのValueTypeをDate型に指定した場合には、「日付型の値を扱う」オブジェクトとして設定されるため、「日付として解釈できる値」として年月日も入力しないと正しく表示が行われません。
  DateEditクラスの場合は、日付入力専用のクラスとして作成されているため時間だけの入力が可能です。

TextBoxやFlexTextBoxで作成した入力オブジェクトで時間だけを入力させる場合、String型のFormatの「Sn.m」を利用するという方法があります。
「Sn.m」を指定すると、文字列の左端を0として数え、nバイト目からmバイトの文字を表示します。
「S0.2:S2.2」のように指定すれば、「HH24:MI」に似せた表示にする事ができます。
但し、String型ではDateの値範囲以外でも入力できてしまうため、別途日付チェックを行う必要があります。

実際の記述例としては、以下時間入力サンプルを参照ください。

[サンプルコード]

 FlexView FlexView1 {
  X = 35;
  Y = 36;
  Width = 104;
  Height = 100;
  CursorMove = $ENTER+$LINEFEED;
  
  FlexRecord FlexRecord1 {
   FlexTextBox FlexTextBox1 {
    
    /* 入力文字種を半角数値に指定 */
    InputMode = $NUMERIC;
    /* 「H24:MI」のような表示になるよう入力フォーマットの指定 */
    Format ="S0.2\":\"S2.2";
    
    Function OnTextChanged( e ) {
     /* 値の変更された行を取得 */
     var r = e.Row;
     /* 値の変更された列の時間の値を取得 */
     var h = str(trim(left(r.FlexTextBox1.Value,2)));
     /* 値の変更された列の分の値を取得 */
     var m = str(trim(right(r.FlexTextBox1.Value,2))); 
     
     /* Dateオブジェクトを利用してチェック */
     var d = new Date();
     
     /* Dateオブジェクトに入力された時分をセット */
     d.setHours(h,m);
     
     /* セットした時分を文字列に変換 */
     var dst = d.ToString();     
     
     if(dst == ""){
      /* 文字列変換された値が空(入力された時分が不正)の
        場合は値を初期化する */
      r.FlexTextBox1.Value = "";
      return;
     }
    }
   }
  }
 }

CRSファイル形式のサンプル
 「時間だけを「H24:MI」の形式で表示・編集したい(DtE_010.crs)
で実際の動作をご確認頂けます。

管理番号: DtE_010
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ