■サイトマップ Search help


Biz/Browserに関する障害レポート


 9665 MaxLengthプロパティとAutoCursorMoveプロパティの設定があるFlexTextBoxでMaxLengthプロパティの設定が無効になる  

対象バージョン Biz/Browser V Ver 5.0.0.0 〜 Biz/Browser V Ver5.0.1.1

障害内容 MaxLengthプロパティが設定されたFlexTextBoxオブジェクト上で、AutoCursorMoveプロパティの設定による自動カーソル移動を行った後、上限文字数まで文字が入力された状態のFlexTextBoxオブジェクトに文字入力を行うとMaxLengthプロパティの設定値以上の文字が入力できる。

[スクリプト例]
FlexView FlexView1 {
  X = 9;
  Y = 9;
  Width = 402;
  Height = 122;
   
  FlexRecord FlexRecord1 {
   FlexTextBox FlexTextBox1 {
    Title = "項目1";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
    AutoCursorMove = $TRUE;
   }
   FlexTextBox FlexTextBox2 {
    Title = "項目2";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
    AutoCursorMove = $FALSE;
   }
  }
  this.InsertRow(5);
 }

上記スクリプト例の場合、「項目1」へ数値6文字入力し「項目2」へカーソル移動後、数値6文字が入力された状態の「項目1」へ文字入力すると6文字以上の入力ができてしまう。

要因 MaxLengthプロパティの判定よりAutoCursorMoveプロパティの判定が優先されており、また既に入力がMaxLengthに達し、AutoCursorMoveの発生条件に該当しなかったため。

対処方法
(方法1) MaxLengthプロパティが無効になってもMaxLengthプロパティ設定値以上の入力をできないようにスクリプトで制御する。

[スクリプト例]
 FlexView FlexView1 {
  X = 7;
  Y = 54;
  Width = 400;
  Height = 123;
  FlexRecord FlexRecord1{
   FlexTextBox FlexTextBox1{
    Title = "項目1";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
    AutoCursorMove = $TRUE;
   }
   
   FlexTextBox FlexTextBox2{
    Title = "項目2";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
    AutoCursorMove = $FALSE;
   }
  }
  Function OnCursorMoved( e ) {
   /* 行のリファレンスを取得 */
   var row = e.row;
   /* 列番号を取得 */
   var col = e.col;
   
   if(Length(row.FlexTextBox1.Value) > 6){
    //.MessageBox("桁数オーバーです");
    /* 値をクリア */
    row.FlexTextbox1.Value = "";
    /* カーソルを対象セルへ設定 */
    ^.FlexView1.ColumnPosition = col - 1;
   }
  }
  This.InsertRow(5); 
 }
※Biz/Browser V Ver5.0.1.0以前のバージョンの場合、管理番号9288の影響で上記の回避方法は利用できません。

(方法2) MaxLengthプロパティの無効化を防ぐため、カーソルの自動移動をAutoCursorMoveプロパティの設定以外で行う。

[スクリプト例A] TextChangedイベントを利用
/* 列数 */
 Number col_cnt = 2;
 
 FlexView FlexView1 {
  X = 9;
  Y = 9;
  Width = 402;
  Height = 122;
  
  FlexRecord FlexRecord1 {
   FlexTextBox FlexTextBox1 {
    Title = "項目1";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
   }
   FlexTextBox FlexTextBox2 {
    Title = "項目2";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
   }
  }
  
  Function OnTextChanged( e ) {
   /* 行のリファレンスを取得 */
   var row_r = e.row;
   
   if(ColumnPosition < ^.col_cnt - 1){
    /* 最終列でない場合、列を右に移動 */
    ColumnPosition = ColumnPosition + 1;
   }else{
    /* 最終行の場合 */
    if(row_r.position < RowCount - 1){
     /* 次の行へカーソル移動 */
     RowPosition = row_r.position + 1;
     /* 1列目にカーソル移動 */
     ColumnPosition = 0;
    }
   }
  }
  this.InsertRow(5);
 }


[スクリプト例B] CursorMoveプロパティとCursorMovedイベントを利用
/* 列数 */
 Number col_cnt = 3;
 
 FlexView FlexView1 {
  X = 9;
  Y = 9;
  Width = 402;
  Height = 122;
  
  /* ENTERキーでカーソル移動を行うように設定 */
  CursorMove = $ENTER;
  
  FlexRecord FlexRecord1 {
   FlexTextBox FlexTextBox1 {
    Title = "項目1";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
   }
   FlexTextBox FlexTextBox2 {
    Title = "項目2";
    Width = 200;
    MaxLength = 6;
    InputMode = $NUMERIC;
   }
   FlexTextBox FlexTextBox3 {
    Title = "移動用ダミー列";
    Width = 0;
   }
  }
  
  Function OnCursorMoved( e ) {
   /* 行のリファレンスを取得 */
   var row_r = e.row;
   /* 列番号を取得 */
   var col_no = e.col;
   
   if(col_no == ^.col_cnt - 1){
    /* 最終行の場合 */
    if(row_r.position < RowCount -1){
     /* 次の行へカーソル移動 */
     RowPosition = row_r.position + 1;
     /* 1列目にカーソル移動 */
     ColumnPosition = 0;
    }else{
     ColumnPosition = col_no -1;
    }
   }
  }
  this.InsertRow(5);
 }

(方法3) 改修バージョンへのバージョンアップを行う。
   
改修バージョン

Biz/Browser V Ver 5.0.2.0


■ 障害レポート一覧へ