【スクリプト】 [Enter]キーの押下でセルを任意の位置に移動させることはできますか?

文書番号 : 21782     文書種別 : 使用方法     最終更新日 : 2006/06/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
アクティブセルを設定するクライアントスクリプトのSetActiveCellメソッドを利用することで可能です。
下記のスクリプトでは、[Enter]キーが押されるとセルのアクティブ設定を1つ下のセルに移動します。


【JavaScript サンプルコード1】
<SCRIPT language="javascript">
var isEdit;//編集フラグ

function window.onload(){
 var spread1=document.all("FpSpread1");
 
 if(spread1==null)
  return;
 
 spread1.onEditStart=estart;
 spread1.onEditStopped=estop;
 
 spread1.onkeyup=goToNextCell;

}

function estart(){
 isEdit=true;//編集中
}

function estop(){
 isEdit=false;//編集終了
}

function goToNextCell(){
 if(isEdit)//編集中は移動をキャンセル
  return;
 
 if(event.keyCode!=13)
  return;
 
 var spread=document.all("FpSpread1");
 
 var row=spread.ActiveRow;
 var col=spread.ActiveCol;
 
 spread.EndEdit();//編集を終了
 spread.ClearSelection();//選択範囲をクリア
  
 if(row+1>=spread.GetRowCount()){
  if(!(col+1>=spread.GetColCount())){
   spread.SetActiveCell(0,col+1);
  }
  else{
   spread.SetActiveCell(0,0);
  }
 }
 else{
  spread.SetActiveCell(row+1,spread.ActiveCol);
 }
}
</SCRIPT>


製品ではセルの編集状態を開始するStartEditメソッドが提供されます。セルがアクティブになった際に発生するonActiveCellChangedイベントとStartEditメソッドを使用することで、セルにフォーカスが移動したら直ぐに編集状態を開始(常時入力)することができます。

下記は[Enter]キーによるセルの移動と、常時入力の処理を実装するクライアント側スクリプトです。

【JavaScript サンプルコード2】
<SCRIPT language="javascript">
var isEdit;//編集フラグ

function window.onload(){
 var spread1=document.all("FpSpread1");
 
 if(spread1==null)
  return;
 
 spread1.onEditStart=estart;
 spread1.onEditStopped=estop;
 
 spread1.onkeyup=goToNextCell;
 spread1.onActiveCellChanged=startEditMode;
}

function estart(){
 isEdit=true;//編集中
}

function estop(){
 isEdit=false;//編集終了
}

function goToNextCell(){
 if(isEdit)//編集中は移動をキャンセル
   return;

 if(event.keyCode!=13)
  return;
 
 var spread=document.all("FpSpread1");
 
 var row=spread.ActiveRow;
 var col=spread.ActiveCol;
 
 spread.EndEdit();//編集を終了
 spread.ClearSelection();//選択範囲をクリア
  
 if(row+1>=spread.GetRowCount()){
  if(!(col+1>=spread.GetColCount())){
   spread.SetActiveCell(0,col+1);
  }
  else{
   spread.SetActiveCell(0,0);
  }
 }
 else{
  spread.SetActiveCell(row+1,spread.ActiveCol);
 }
 
 var td=spread.GetCellByRowCol(spread.ActiveRow,spread.ActiveCol);
 spread.StartEdit(td);
}
function startEditMode(){
 var s=event.srcElement;
 s.StartEdit();
}
</SCRIPT>

キーワード
クライアント側スクリプト

この文書は、以前は次のFAQ IDで公開されていました : 9106