作成日: 2020/01/29 最終更新日: 2020/04/30
文書種別
不具合
状況
修正済み
詳細
ソートを行った状態で再度ソート操作を行いSortingイベント内で処理をキャンセルすると、元々行っていたソートのソート順やソートデータがクリアされます。その結果、ソートインジケータが初期の状態に戻ります。
製品では値によるソート以外にも色やアイコンによるソートをサポートしており、ソートデータは何を基準にソートしたのかという情報や、基準が値以外であればソートに使用された色やアイコンの情報となります。
【再現手順1】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述し、プロジェクトをデバック実行します。
3.A列を昇順に設定(ソート順が変更されました。操作をキャンセルしますか?→「いいえ」を選択して設定する)
----インジケータが↑となる
4.A列を降順に設定(ソート順が変更されました。操作をキャンセルしますか?→「はい」を選択し降順ソートをキャンセルする)
----2で表示されたインジケータ(↑)が消えてしまう
【再現手順2】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述する。
3.A列の「色で並べ替え」-「赤」を選択(ソート順が変更されました。操作をキャンセルしますか?→「いいえ」を選択して設定する)
----インジケータが↑となる
----フィルタメニューでは「色で並べ替え」が選択された状態になる
4.A列を降順に設定(ソート順が変更されました。操作をキャンセルしますか?→「はい」を選択し降順ソートをキャンセルする)
----2で表示されたインジケータ(↑)が消えてしまう
----フィルタメニューの「色で並べ替え」が選択された状態ではなくなる
■サンプルコード(VB.NET)
【要因】
e.cancel = trueのときにSPREADが処理をキャンセルしていることにより発生しています。
製品では値によるソート以外にも色やアイコンによるソートをサポートしており、ソートデータは何を基準にソートしたのかという情報や、基準が値以外であればソートに使用された色やアイコンの情報となります。
【再現手順1】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述し、プロジェクトをデバック実行します。
3.A列を昇順に設定(ソート順が変更されました。操作をキャンセルしますか?→「いいえ」を選択して設定する)
----インジケータが↑となる
4.A列を降順に設定(ソート順が変更されました。操作をキャンセルしますか?→「はい」を選択し降順ソートをキャンセルする)
----2で表示されたインジケータ(↑)が消えてしまう
【再現手順2】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述する。
3.A列の「色で並べ替え」-「赤」を選択(ソート順が変更されました。操作をキャンセルしますか?→「いいえ」を選択して設定する)
----インジケータが↑となる
----フィルタメニューでは「色で並べ替え」が選択された状態になる
4.A列を降順に設定(ソート順が変更されました。操作をキャンセルしますか?→「はい」を選択し降順ソートをキャンセルする)
----2で表示されたインジケータ(↑)が消えてしまう
----フィルタメニューの「色で並べ替え」が選択された状態ではなくなる
■サンプルコード(VB.NET)
Imports FarPoint.Win.Spread
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' バージョンの確認
Me.Text = FpSpread1.ProductVersion
' フィルタとソートの設定
FpSpread1.ActiveSheet.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.EnhancedContextMenu
FpSpread1.ActiveSheet.AutoSortEnhancedContextMenu = True
FpSpread1.ActiveSheet.Columns(0).AllowAutoFilter = True
FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True
FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True
FpSpread1.ActiveSheet.Cells(0, 0).BackColor = Color.Red
FpSpread1.ActiveSheet.Cells(1, 0).BackColor = Color.Yellow
FpSpread1.ActiveSheet.Cells(2, 0).BackColor = Color.Blue
Dim celRange1 As New FarPoint.Win.Spread.Model.CellRange(4, 0, 4, 1)
Dim rule As New FarPoint.Win.Spread.IconSetConditionalFormattingRule(FarPoint.Win.Spread.ConditionalFormattingIconSetStyle.ThreeRimmedTrafficLights)
FpSpread1.Sheets(0).SetConditionalFormatting(New FarPoint.Win.Spread.Model.CellRange() {celRange1}, rule)
' 値の設定
Dim rnd As New Random()
For i = 0 To FpSpread1.ActiveSheet.RowCount - 1
FpSpread1.ActiveSheet.SetValue(i, 0, rnd.Next(1, 10))
FpSpread1.ActiveSheet.SetValue(i, 1, i)
Next
End Sub
Private Sub FpSpread1_AutoFilteringColumn(sender As Object, e As AutoFilteringColumnEventArgs) Handles FpSpread1.AutoFilteringColumn
Dim result As DialogResult = MessageBox.Show("フィルタリングが変更されました。操作をキャンセルしますか?", "確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2)
If result = DialogResult.Yes Then
e.Cancel = True
End If
End Sub
Private Sub FpSpread1_Sorting(sender As Object, e As SortingEventArgs) Handles FpSpread1.Sorting
Dim result As DialogResult = MessageBox.Show("ソート順が変更されました。操作をキャンセルしますか?", "確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2)
If result = DialogResult.Yes Then
e.Cancel = True
End If
End Sub
End Class
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' バージョンの確認
Me.Text = FpSpread1.ProductVersion
' フィルタとソートの設定
FpSpread1.ActiveSheet.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.EnhancedContextMenu
FpSpread1.ActiveSheet.AutoSortEnhancedContextMenu = True
FpSpread1.ActiveSheet.Columns(0).AllowAutoFilter = True
FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True
FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True
FpSpread1.ActiveSheet.Cells(0, 0).BackColor = Color.Red
FpSpread1.ActiveSheet.Cells(1, 0).BackColor = Color.Yellow
FpSpread1.ActiveSheet.Cells(2, 0).BackColor = Color.Blue
Dim celRange1 As New FarPoint.Win.Spread.Model.CellRange(4, 0, 4, 1)
Dim rule As New FarPoint.Win.Spread.IconSetConditionalFormattingRule(FarPoint.Win.Spread.ConditionalFormattingIconSetStyle.ThreeRimmedTrafficLights)
FpSpread1.Sheets(0).SetConditionalFormatting(New FarPoint.Win.Spread.Model.CellRange() {celRange1}, rule)
' 値の設定
Dim rnd As New Random()
For i = 0 To FpSpread1.ActiveSheet.RowCount - 1
FpSpread1.ActiveSheet.SetValue(i, 0, rnd.Next(1, 10))
FpSpread1.ActiveSheet.SetValue(i, 1, i)
Next
End Sub
Private Sub FpSpread1_AutoFilteringColumn(sender As Object, e As AutoFilteringColumnEventArgs) Handles FpSpread1.AutoFilteringColumn
Dim result As DialogResult = MessageBox.Show("フィルタリングが変更されました。操作をキャンセルしますか?", "確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2)
If result = DialogResult.Yes Then
e.Cancel = True
End If
End Sub
Private Sub FpSpread1_Sorting(sender As Object, e As SortingEventArgs) Handles FpSpread1.Sorting
Dim result As DialogResult = MessageBox.Show("ソート順が変更されました。操作をキャンセルしますか?", "確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2)
If result = DialogResult.Yes Then
e.Cancel = True
End If
End Sub
End Class
【要因】
e.cancel = trueのときにSPREADが処理をキャンセルしていることにより発生しています。
回避方法
Service Pack 4(v12.0.4505.2012 )で修正済み。
旧文書番号
84895