最終セル(シート上の最右下)でのEnterキー押下で先頭セル(シート上の最左上)にアクティブセルを戻したい
対象製品
SPREAD for Windows Forms 8.0J
詳細
FpSpreadクラスメンバであるKeyDownイベントおよびAdvanceイベントの併用によって実現します。具体的な方法については以下のサンプルコードをご参照ください。なお、以下のサンプルではEnterキーに対する入力マップの変更を行っています。
◎サンプルコード(VB)
◎サンプルコード(C#)
◎サンプルコード(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
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;
}
}
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;
}
}