作成日: 2018/06/05 最終更新日: 2018/06/05
文書種別
使用方法
詳細
自動ソート実行時には、選択がクリアされ、アクティブセルが先頭行に移動し、LeaveCellイベントが発生します。自動ソート実行の前後でアクティブセルを維持したい場合は、LeaveCellイベントのイベント引数e.CancelをTrueにしてアクティブセル移動をキャンセルし、独自にアクティブセルを設定する必要があります。
◎サンプルコード(VB)
◎サンプルコード(C#)
◎サンプルコード(VB)
Private preRow As Integer
Private preCol As Integer
Private srtFlg As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' SPREADの初期設定
FpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, True)
FpSpread1.ActiveSheet.RowCount = 10
For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
FpSpread1.ActiveSheet.SetValue(i, 0, String.Format("A{0}", i + 1))
Next
' 対応策[1/4]
' ソート発生検知用フラグを初期化
srtFlg = False
End Sub
Private Sub FpSpread1_AutoSortingColumn(sender As Object, e As FarPoint.Win.Spread.AutoSortingColumnEventArgs) Handles FpSpread1.AutoSortingColumn
' 対応策[2/4]
' ソート発生を検知
srtFlg = True
End Sub
Private Sub FpSpread1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FpSpread1.MouseDown
Dim htInfo As FarPoint.Win.Spread.HitTestInformation = FpSpread1.HitTest(e.X, e.Y)
If htInfo.Type = FarPoint.Win.Spread.HitTestType.ColumnHeader Then
If htInfo.HeaderInfo.InSort Then
' アクティブセルの保存
Dim row As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
Dim col As Integer = FpSpread1.ActiveSheet.ActiveColumnIndex
preRow = FpSpread1.ActiveSheet.GetModelRowFromViewRow(row)
preCol = FpSpread1.ActiveSheet.GetModelColumnFromViewColumn(col)
End If
End If
End Sub
Private Sub FpSpread1_LeaveCell(sender As Object, e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell
If srtFlg = True Then
' 対応策[3/4]
' アクティブセルの移動をキャンセル
e.Cancel = True
' アクティブセルの設定(見た目上の位置を維持したい場合は以下のSetActiveCellをコメントアウト)
Dim row As Integer = FpSpread1.ActiveSheet.GetViewRowFromModelRow(preRow)
Dim col As Integer = FpSpread1.ActiveSheet.GetViewColumnFromModelColumn(preCol)
FpSpread1.ActiveSheet.SetActiveCell(row, col)
' 対応策[4/4]
' ソート発生フラグを初期化
srtFlg = False
End If
End Sub
Private preCol As Integer
Private srtFlg As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' SPREADの初期設定
FpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, True)
FpSpread1.ActiveSheet.RowCount = 10
For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
FpSpread1.ActiveSheet.SetValue(i, 0, String.Format("A{0}", i + 1))
Next
' 対応策[1/4]
' ソート発生検知用フラグを初期化
srtFlg = False
End Sub
Private Sub FpSpread1_AutoSortingColumn(sender As Object, e As FarPoint.Win.Spread.AutoSortingColumnEventArgs) Handles FpSpread1.AutoSortingColumn
' 対応策[2/4]
' ソート発生を検知
srtFlg = True
End Sub
Private Sub FpSpread1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FpSpread1.MouseDown
Dim htInfo As FarPoint.Win.Spread.HitTestInformation = FpSpread1.HitTest(e.X, e.Y)
If htInfo.Type = FarPoint.Win.Spread.HitTestType.ColumnHeader Then
If htInfo.HeaderInfo.InSort Then
' アクティブセルの保存
Dim row As Integer = FpSpread1.ActiveSheet.ActiveRowIndex
Dim col As Integer = FpSpread1.ActiveSheet.ActiveColumnIndex
preRow = FpSpread1.ActiveSheet.GetModelRowFromViewRow(row)
preCol = FpSpread1.ActiveSheet.GetModelColumnFromViewColumn(col)
End If
End If
End Sub
Private Sub FpSpread1_LeaveCell(sender As Object, e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell
If srtFlg = True Then
' 対応策[3/4]
' アクティブセルの移動をキャンセル
e.Cancel = True
' アクティブセルの設定(見た目上の位置を維持したい場合は以下のSetActiveCellをコメントアウト)
Dim row As Integer = FpSpread1.ActiveSheet.GetViewRowFromModelRow(preRow)
Dim col As Integer = FpSpread1.ActiveSheet.GetViewColumnFromModelColumn(preCol)
FpSpread1.ActiveSheet.SetActiveCell(row, col)
' 対応策[4/4]
' ソート発生フラグを初期化
srtFlg = False
End If
End Sub
◎サンプルコード(C#)
private int preRow;
private int preCol;
private bool srtFlg;
private void Form1_Load(object sender, EventArgs e)
{
// SPREADの初期設定
fpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, true);
fpSpread1.ActiveSheet.RowCount = 10;
for (int i = 0; i <= fpSpread1.ActiveSheet.RowCount - 1; i++)
{
fpSpread1.ActiveSheet.SetValue(i, 0, string.Format("A{0}", i + 1));
}
// 対応策[1/4]
// ソート発生検知用フラグを初期化
srtFlg = false;
}
private void fpSpread1_AutoSortingColumn(object sender, FarPoint.Win.Spread.AutoSortingColumnEventArgs e)
{
// 対応策[2/4]
// ソート発生を検知
srtFlg = true;
}
void fpSpread1_MouseDown(object sender, MouseEventArgs e)
{
FarPoint.Win.Spread.HitTestInformation htInfo = fpSpread1.HitTest(e.X, e.Y);
if (htInfo.Type == FarPoint.Win.Spread.HitTestType.ColumnHeader)
{
if (htInfo.HeaderInfo.InSort)
{
// アクティブセルの保存
int row = fpSpread1.ActiveSheet.ActiveRowIndex;
int col = fpSpread1.ActiveSheet.ActiveColumnIndex;
preRow = fpSpread1.ActiveSheet.GetModelRowFromViewRow(row);
preCol = fpSpread1.ActiveSheet.GetModelColumnFromViewColumn(col);
}
}
}
private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
{
if (srtFlg == true)
{
// 対応策[3/4]
// アクティブセルの移動をキャンセル
e.Cancel = true;
// アクティブセルの設定(見た目上の位置を維持したい場合は以下のSetActiveCellをコメントアウト)
int row = fpSpread1.ActiveSheet.GetViewRowFromModelRow(preRow);
int col = fpSpread1.ActiveSheet.GetViewColumnFromModelColumn(preCol);
fpSpread1.ActiveSheet.SetActiveCell(row, col);
// 対応策[4/4]
// ソート発生フラグを初期化
srtFlg = false;
}
}
private int preCol;
private bool srtFlg;
private void Form1_Load(object sender, EventArgs e)
{
// SPREADの初期設定
fpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, true);
fpSpread1.ActiveSheet.RowCount = 10;
for (int i = 0; i <= fpSpread1.ActiveSheet.RowCount - 1; i++)
{
fpSpread1.ActiveSheet.SetValue(i, 0, string.Format("A{0}", i + 1));
}
// 対応策[1/4]
// ソート発生検知用フラグを初期化
srtFlg = false;
}
private void fpSpread1_AutoSortingColumn(object sender, FarPoint.Win.Spread.AutoSortingColumnEventArgs e)
{
// 対応策[2/4]
// ソート発生を検知
srtFlg = true;
}
void fpSpread1_MouseDown(object sender, MouseEventArgs e)
{
FarPoint.Win.Spread.HitTestInformation htInfo = fpSpread1.HitTest(e.X, e.Y);
if (htInfo.Type == FarPoint.Win.Spread.HitTestType.ColumnHeader)
{
if (htInfo.HeaderInfo.InSort)
{
// アクティブセルの保存
int row = fpSpread1.ActiveSheet.ActiveRowIndex;
int col = fpSpread1.ActiveSheet.ActiveColumnIndex;
preRow = fpSpread1.ActiveSheet.GetModelRowFromViewRow(row);
preCol = fpSpread1.ActiveSheet.GetModelColumnFromViewColumn(col);
}
}
}
private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
{
if (srtFlg == true)
{
// 対応策[3/4]
// アクティブセルの移動をキャンセル
e.Cancel = true;
// アクティブセルの設定(見た目上の位置を維持したい場合は以下のSetActiveCellをコメントアウト)
int row = fpSpread1.ActiveSheet.GetViewRowFromModelRow(preRow);
int col = fpSpread1.ActiveSheet.GetViewColumnFromModelColumn(preCol);
fpSpread1.ActiveSheet.SetActiveCell(row, col);
// 対応策[4/4]
// ソート発生フラグを初期化
srtFlg = false;
}
}
旧文書番号
82839