作成日: 2017/07/10 最終更新日: 2017/12/22
文書種別
不具合
状況
修正済み
詳細
この現象は、以下の手順で確認できます。
【実行手順】
1. SPREADを配置します
2. 以下のサンプルコードをコピーして実行します
3. A1セルのデータを変更して[Enter]キーを押します
--- StackOverflowExceptionが発生します
【サンプルコード】
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' フィルタの設定
FpSpread1.ActiveSheet.SetColumnAllowFilter(0, True)
FpSpread1.ActiveSheet.SetFilteredColumn(0, "0")
' 値の設定
For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
FpSpread1.ActiveSheet.SetValue(i, 0, i Mod 10)
Next
' 条件付き書式の設定
Dim formulaRule1 As New FarPoint.Win.Spread.FormulaConditionalFormattingRule("$A1 > 5")
formulaRule1.BackColor = Color.YellowGreen
FpSpread1.ActiveSheet.SetConditionalFormatting(0, 0, FpSpread1.ActiveSheet.RowCount, 1, formulaRule1)
End Sub
【実行手順】
1. SPREADを配置します
2. 以下のサンプルコードをコピーして実行します
3. A1セルのデータを変更して[Enter]キーを押します
--- StackOverflowExceptionが発生します
【サンプルコード】
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' フィルタの設定
FpSpread1.ActiveSheet.SetColumnAllowFilter(0, True)
FpSpread1.ActiveSheet.SetFilteredColumn(0, "0")
' 値の設定
For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
FpSpread1.ActiveSheet.SetValue(i, 0, i Mod 10)
Next
' 条件付き書式の設定
Dim formulaRule1 As New FarPoint.Win.Spread.FormulaConditionalFormattingRule("$A1 > 5")
formulaRule1.BackColor = Color.YellowGreen
FpSpread1.ActiveSheet.SetConditionalFormatting(0, 0, FpSpread1.ActiveSheet.RowCount, 1, formulaRule1)
End Sub
回避方法
Service Pack 2(v10.0.4006.2012)で修正済み。
Service Pack 2より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のサンプルコードのように、編集時に自動フィルタを停止し、値の変更後に自動フィルタを再開します。
【サンプルコード】
Private Sub FpSpread1_EditChange(sender As Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.EditChange
'【対応策】[1/2]フィルタを設定した第1列の編集時には自動フィルタ機能を停止
If e.Column = 0 Then
FpSpread1.ActiveSheet.AutoFilter = False
End If
End Sub
Private Sub FpSpread1_Change(sender As Object, e As FarPoint.Win.Spread.ChangeEventArgs) Handles FpSpread1.Change
If e.Column = 0 Then
'【対応策】[2/2]フィルタを設定した第1列の値変更後に自動フィルタ機能を再開
FpSpread1.ActiveSheet.AutoFilter = True
FpSpread1.ActiveSheet.InvalidateRowFilter(True, True)
End If
End Sub
Service Pack 2より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のサンプルコードのように、編集時に自動フィルタを停止し、値の変更後に自動フィルタを再開します。
【サンプルコード】
Private Sub FpSpread1_EditChange(sender As Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.EditChange
'【対応策】[1/2]フィルタを設定した第1列の編集時には自動フィルタ機能を停止
If e.Column = 0 Then
FpSpread1.ActiveSheet.AutoFilter = False
End If
End Sub
Private Sub FpSpread1_Change(sender As Object, e As FarPoint.Win.Spread.ChangeEventArgs) Handles FpSpread1.Change
If e.Column = 0 Then
'【対応策】[2/2]フィルタを設定した第1列の値変更後に自動フィルタ機能を再開
FpSpread1.ActiveSheet.AutoFilter = True
FpSpread1.ActiveSheet.InvalidateRowFilter(True, True)
End If
End Sub
旧文書番号
40803