シート上での[Tab]キー押下により他のコントロールへフォーカスを遷移させるにはどうすればいいのですか?

文書番号 : 33579     文書種別 : 使用方法     登録日 : 2012/11/14     最終更新日 : 2012/11/14
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
詳細
SPREADでは、[Tab]キーに対するデフォルト動作を予め「セル移動」に定義しています。

例えば他のコントロールからシートにフォーカスを遷移させ、この状態での[Tab]キー押下によってセル移動ではなく次のコントロールへのフォーカス遷移を行いたいような場合には、このデフォルト定義されている動作を無効とすることで対応可能となります。変更方法については以下をご参照ください。

デフォルトの入力マップを変更する

また、先頭セル(シート左上)での[Shift]+[Tab]キー押下、および最終セル(シート右下)での[Tab]キー押下によってはAdvanceイベントが発生します。(入力マップはデフォルト定義)
こちらについては、例えばシート内の移動は通常の[Tab]キー押下にて行い、先頭セルおよび最終セルでの押下時のみ他のコントロールへフォーカスを遷移させるような制御を、当イベントの利用により実装することも可能です。

Advanceイベントでは、AdvanceEventArgsクラスである引数eより以下の情報を参照できます。
 【e.AdvanceNext】前のコントロールに戻るか次のコントロールに進むかを決定する値を取得します
 【e.Cancel】デフォルトの処理をキャンセルするかどうかを指定する値を取得または設定します

なお、[Tab]キー押下以外にも[カーソル]キーや、例えば入力マップによりセル移動を定義した[Enter]キー押下などによっても上記イベントを利用することが出来ます。用途によって使い分けてください。(サンプルコード中のSelectNextControlメソッドについてはMSDNライブラリをご参照ください。)

◎サンプルコード(VB)
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    FpSpread1.ActiveSheet.RowCount = 3
    FpSpread1.ActiveSheet.ColumnCount = 3
  End Sub

  Private Sub FpSpread1_Advance(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.AdvanceEventArgs) Handles FpSpread1.Advance
    Dim iRow As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
    Dim iCol As Integer = FpSpread1.ActiveSheet.ActiveColumnIndex
    If (iRow = 0 And iCol = 0) Or _
      (iRow = FpSpread1.ActiveSheet.RowCount - 1 And iCol = FpSpread1.ActiveSheet.ColumnCount - 1) Then
      '先頭セルまたは最終セルがアクティブの場合のみ
      e.Cancel = true
      Me.SelectNextControl(FpSpread1, e.AdvanceNext, True, True, True)
    End If
  End Sub


◎サンプルコード(C#)
  private void Form1_Load(object sender, System.EventArgs e)
  {
    fpSpread1.ActiveSheet.RowCount = 3;
    fpSpread1.ActiveSheet.ColumnCount = 3;
  }

  private void fpSpread1_Advance(object sender, FarPoint.Win.Spread.AdvanceEventArgs e)
  {
    int iRow = fpSpread1.ActiveSheet.ActiveRowIndex;
    int iCol = fpSpread1.ActiveSheet.ActiveColumnIndex;
    if (iRow == 0 && iCol == 0 || iRow == fpSpread1.ActiveSheet.RowCount - 1 && iCol == fpSpread1.ActiveSheet.ColumnCount - 1)
    {
      //先頭セルまたは最終セルがアクティブの場合のみ
      e.Cancel = true;
      this.SelectNextControl(fpSpread1, e.AdvanceNext, true, true, true);
    }
  }

イベントの詳細については製品ヘルプをご参照ください。
関連情報
キーワード
「コントロール移動」