シート上での[Tab]キー押下により他のコントロールへフォーカスを遷移させるにはどうすればいいのですか?
対象製品
SPREAD for Windows Forms 7.0J
詳細
SPREADでは、[Tab]キーに対するデフォルト動作を予め「セル移動」に定義しています。
例えば他のコントロールからシートにフォーカスを遷移させ、この状態での[Tab]キー押下によってセル移動ではなく次のコントロールへのフォーカス遷移を行いたいような場合には、このデフォルト定義されている動作を無効とすることで対応可能となります。変更方法については以下をご参照ください。
デフォルトの入力マップを変更する
また、先頭セル(シート左上)での[Shift]+[Tab]キー押下、および最終セル(シート右下)での[Tab]キー押下によってはAdvanceイベントが発生します。(入力マップはデフォルト定義)
こちらについては、例えばシート内の移動は通常の[Tab]キー押下にて行い、先頭セルおよび最終セルでの押下時のみ他のコントロールへフォーカスを遷移させるような制御を、当イベントの利用により実装することも可能です。
Advanceイベントでは、AdvanceEventArgsクラスである引数eより以下の情報を参照できます。
なお、[Tab]キー押下以外にも[カーソル]キーや、例えば入力マップによりセル移動を定義した[Enter]キー押下などによっても上記イベントを利用することが出来ます。用途によって使い分けてください。(サンプルコード中のSelectNextControlメソッドについてはMSDNライブラリをご参照ください。)
◎サンプルコード(VB)
◎サンプルコード(C#)
イベントの詳細については製品ヘルプをご参照ください。
例えば他のコントロールからシートにフォーカスを遷移させ、この状態での[Tab]キー押下によってセル移動ではなく次のコントロールへのフォーカス遷移を行いたいような場合には、このデフォルト定義されている動作を無効とすることで対応可能となります。変更方法については以下をご参照ください。
デフォルトの入力マップを変更する
また、先頭セル(シート左上)での[Shift]+[Tab]キー押下、および最終セル(シート右下)での[Tab]キー押下によってはAdvanceイベントが発生します。(入力マップはデフォルト定義)
こちらについては、例えばシート内の移動は通常の[Tab]キー押下にて行い、先頭セルおよび最終セルでの押下時のみ他のコントロールへフォーカスを遷移させるような制御を、当イベントの利用により実装することも可能です。
Advanceイベントでは、AdvanceEventArgsクラスである引数eより以下の情報を参照できます。
【e.AdvanceNext】前のコントロールに戻るか次のコントロールに進むかを決定する値を取得します
【e.Cancel】デフォルトの処理をキャンセルするかどうかを指定する値を取得または設定します
【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
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); }
}
{
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); }
}
イベントの詳細については製品ヘルプをご参照ください。
関連情報
キーワード
「コントロール移動」