最終セル(シート上の最右下)でのEnterキー押下で先頭セル(シート上の最左上)にアクティブセルを戻したい

文書番号 : 38981     文書種別 : 使用方法     登録日 : 2015/07/03     最終更新日 : 2015/07/03
文書を印刷する
対象製品
SPREAD for Windows Forms 8.0J
詳細
FpSpreadクラスメンバであるKeyDownイベントおよびAdvanceイベントの併用によって実現します。具体的な方法については以下のサンプルコードをご参照ください。なお、以下のサンプルではEnterキーに対する入力マップの変更を行っています。

◎サンプルコード(VB)
Imports FarPoint.Win.Spread

  Dim enterFlg As Boolean = False

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    FpSpread1.ActiveSheet.RowCount = 3
    FpSpread1.ActiveSheet.ColumnCount = 3
    'フォーカス時のEnterキー押下による動作を「次列へ移動」とします。
    Dim im As New InputMap
    im = FpSpread1.GetInputMap(InputMapMode.WhenFocused)
    im.Put(New Keystroke(Keys.Enter, Keys.None), SpreadActions.MoveToNextColumnWrap)
  End Sub

  Private Sub FpSpread1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles FpSpread1.KeyDown
    enterFlg = False
    If e.KeyCode = Keys.Enter Then
      'Enterキー押下を検知
      enterFlg = True
    End If
  End Sub

  Private Sub FpSpread1_Advance(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.AdvanceEventArgs) Handles FpSpread1.Advance
    If enterFlg And e.AdvanceNext Then
      If FpSpread1.ActiveSheet.ActiveRowIndex = FpSpread1.ActiveSheet.RowCount - 1 And _
        FpSpread1.ActiveSheet.ActiveColumnIndex = FpSpread1.ActiveSheet.ColumnCount - 1 Then
        '最終セルでのEnterキー押下によってアクティブセルを先頭に位置付けます
        e.Cancel = True
        FpSpread1.ActiveSheet.SetActiveCell(0, 0)
      End If
      enterFlg = False
    End If
  End Sub


◎サンプルコード(C#)
using FarPoint.Win.Spread;

  private bool enterFlg = false;

  private void Form1_Load(object sender, System.EventArgs e)
  {
    fpSpread1.ActiveSheet.RowCount = 3;
    fpSpread1.ActiveSheet.ColumnCount = 3;
    //フォーカス時のEnterキー押下による動作を「次列へ移動」とします。
    InputMap im;
    im = fpSpread1.GetInputMap(InputMapMode.WhenFocused);
    im.Put(new Keystroke(Keys.Enter, Keys.None), SpreadActions.MoveToNextColumnWrap);
  }

  private void fpSpread1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
  {
    enterFlg = false;
    if (e.KeyCode == Keys.Enter)
    {
      //Enterキー押下を検知
      enterFlg = true;
    }
  }

  private void fpSpread1_Advance(object sender, FarPoint.Win.Spread.AdvanceEventArgs e)
  {
    if (enterFlg && e.AdvanceNext)
    {
      if (fpSpread1.ActiveSheet.ActiveRowIndex == fpSpread1.ActiveSheet.RowCount -1 &&
        fpSpread1.ActiveSheet.ActiveColumnIndex == fpSpread1.ActiveSheet.ColumnCount -1)
      {
        //最終セルでのEnterキー押下によってアクティブセルを先頭に位置付けます
        e.Cancel = true;
        fpSpread1.ActiveSheet.SetActiveCell(0, 0);
      }
      enterFlg = false;
    }
  }