作成日: 2020/01/29 最終更新日: 2020/04/30
文書種別
不具合
状況
修正済み
詳細
フィルタリングを行った状態で再度フィルタリング操作を行いAutoFilteringColumnイベントで処理をキャンセルすると、元々行っていたフィルタリングの状態までクリアされます。その結果、すべての行が表示され、フィルタインジケータも初期状態に戻ります。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述し、プロジェクトをデバック実行します。
3.フィルターダイアログを開き、列Aの「1」のチェックを外します。
4. [OK]をクリックします。
5.「フィルタリングが変更されました。操作をキャンセルしますか?」のようなダイアログが表示されます。 →「いいえ」を選択して設定します。
-- フィルターが実行され、フィルターマークのインジケーターになります。
6.フィルターダイアログを開き、列Aの「2」のチェックを外します。
7. [OK]をクリックします。
8.「フィルタリングが変更されました。操作をキャンセルしますか?」のようなダイアログが表示されます。 →[はい]を選択して、フィルターをキャンセルします。
-- 手順5で設定した「1」を拒否するフィルターもキャンセルされ、すべての行が表示され、フィルターマークのインジケーターが消えます(NG)。
■サンプルコード(VB.NET)
【要因】
AutoFilteringColumnイベントが発生する前に古いフィルター結果がクリアされるために発生しています。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述し、プロジェクトをデバック実行します。
3.フィルターダイアログを開き、列Aの「1」のチェックを外します。
4. [OK]をクリックします。
5.「フィルタリングが変更されました。操作をキャンセルしますか?」のようなダイアログが表示されます。 →「いいえ」を選択して設定します。
-- フィルターが実行され、フィルターマークのインジケーターになります。
6.フィルターダイアログを開き、列Aの「2」のチェックを外します。
7. [OK]をクリックします。
8.「フィルタリングが変更されました。操作をキャンセルしますか?」のようなダイアログが表示されます。 →[はい]を選択して、フィルターをキャンセルします。
-- 手順5で設定した「1」を拒否するフィルターもキャンセルされ、すべての行が表示され、フィルターマークのインジケーターが消えます(NG)。
■サンプルコード(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
【要因】
AutoFilteringColumnイベントが発生する前に古いフィルター結果がクリアされるために発生しています。
回避方法
Service Pack 4(v12.0.4505.2012 )で修正済み。
旧文書番号
84896