作成日: 2020/01/08 最終更新日: 2020/04/30
文書種別
不具合
状況
修正済み
詳細
アウトラインのレベルボタンを押下してアウトラインを展開または折りたたんだ際に、RangeGroupStateChangedイベントが正しく発生しない場合があります。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを配置します
2.下記のサンプルコードを記述します。
3.プロジェクトを実行します。
4.表示されているアウトラインの+、-ボタンを押下します。
----------------イベントが発生し、コンソールに出力されます。
5.表示されているアウトラインのレベル(数字)ボタンを押下します。
----------------イベントが発生せず、コンソールに出力されません。
■サンプルコード(VB.NET)
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを配置します
2.下記のサンプルコードを記述します。
3.プロジェクトを実行します。
4.表示されているアウトラインの+、-ボタンを押下します。
----------------イベントが発生し、コンソールに出力されます。
5.表示されているアウトラインのレベル(数字)ボタンを押下します。
----------------イベントが発生せず、コンソールに出力されません。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' アウトラインの設定
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, False)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, False)
End Sub
Private Sub FpSpread1_RangeGroupStateChanged(sender As Object, e As RangeGroupStateChangedEventArgs) Handles FpSpread1.RangeGroupStateChanged
Console.WriteLine($"{e.RangeGroupInfo}" & "RangeGroupStateChanged")
If e.RangeGroupInfo.State = FarPoint.Win.Spread.GroupState.Collapsed Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.RangeGroupInfo}" & "Collapsed")
ElseIf e.RangeGroupInfo.State = FarPoint.Win.Spread.GroupState.Expanded Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.RangeGroupInfo}" & "Expanded")
End If
End Sub
' アウトラインの設定
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, False)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, False)
End Sub
Private Sub FpSpread1_RangeGroupStateChanged(sender As Object, e As RangeGroupStateChangedEventArgs) Handles FpSpread1.RangeGroupStateChanged
Console.WriteLine($"{e.RangeGroupInfo}" & "RangeGroupStateChanged")
If e.RangeGroupInfo.State = FarPoint.Win.Spread.GroupState.Collapsed Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.RangeGroupInfo}" & "Collapsed")
ElseIf e.RangeGroupInfo.State = FarPoint.Win.Spread.GroupState.Expanded Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.RangeGroupInfo}" & "Expanded")
End If
End Sub
回避方法
Service Pack 4(v12.0.4505.2012 )で修正済み。
Service Pack を適用せずに対処する方法としては、製品のRangeGroupStateChangedイベント使用するのではなく、MouseDownイベントやAddHandlerを使用してイベントを独自に実装する方法で回避が可能です。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する方法としては、製品のRangeGroupStateChangedイベント使用するのではなく、MouseDownイベントやAddHandlerを使用してイベントを独自に実装する方法で回避が可能です。
■サンプルコード(VB.NET)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' アウトラインの設定
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, False)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, False)
' 回避方法
Dim rangeGroupModel As FarPoint.Win.Spread.IRangeGroupModel = FpSpread1.ActiveSheet.Models.RangeGroupModel
If rangeGroupModel IsNot Nothing Then
AddHandler rangeGroupModel.Changed, AddressOf RangeGroupModel_Changed
End If
End Sub
Dim tempRangeGroup As Dictionary(Of Integer, RangeGroupInfo()) = New Dictionary(Of Integer, RangeGroupInfo())()
Private Sub RangeGroupModel_Changed(ByVal sender As Object, ByVal e As RangeGroupModelEventArgs)
If e.Type = RangeGroupModelEventType.Expand Then
Dim len As Integer = e.GroupsToExpand.Length
Dim oldRangeGroups As RangeGroupInfo()
For i As Integer = 0 To len - 1
Dim rangeInfo As RangeGroupInfo = e.GroupsToExpand(i)
Dim level As Integer = rangeInfo.Level
If tempRangeGroup.TryGetValue(level, oldRangeGroups) Then
Dim l As Integer = oldRangeGroups.Length
For j As Integer = 0 To l - 1
Dim oldRangeInfo As RangeGroupInfo = oldRangeGroups(i)
If rangeInfo.Start = oldRangeInfo.Start AndAlso rangeInfo.[End] = oldRangeInfo.[End] AndAlso oldRangeInfo.State <> rangeInfo.State Then
Console.WriteLine($"{e.GroupsToExpand(0)}" & "Fire StateChanged event")
If e.GroupsToExpand(0).State = FarPoint.Win.Spread.GroupState.Collapsed Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.GroupsToExpand(0)}" & "Collapsed")
ElseIf e.GroupsToExpand(0).State = FarPoint.Win.Spread.GroupState.Expanded Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.GroupsToExpand(0)}" & "Expanded")
End If
End If
Next
End If
Next
End If
End Sub
Private Sub FpSpread1_MouseDown(sender As Object, e As MouseEventArgs) Handles FpSpread1.MouseDown
tempRangeGroup.Clear()
Dim hitTest As FarPoint.Win.Spread.HitTestInformation = FpSpread1.HitTest(e.X, e.Y)
Dim rangeGroupModel As IRangeGroupModel = FpSpread1.ActiveSheet.Models.RangeGroupModel
If hitTest.Type = HitTestType.RangeGroup Then
tempRangeGroup = New Dictionary(Of Integer, RangeGroupInfo())()
Dim level As Integer = hitTest.RangeGroupInfo.ColumnLevel
If hitTest.RangeGroupInfo.InRowBar OrElse hitTest.RangeGroupInfo.InRowPanel Then
level = hitTest.RangeGroupInfo.RowLevel
End If
For i As Integer = 1 To level
tempRangeGroup.Add(i, rangeGroupModel.GetRangeGroupInfo(i, hitTest.RangeGroupInfo.InRowBar OrElse hitTest.RangeGroupInfo.InRowPanel))
Next
End If
End Sub
End Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' アウトラインの設定
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, True)
FpSpread1.ActiveSheet.AddRangeGroup(0, 5, False)
FpSpread1.ActiveSheet.AddRangeGroup(0, 3, False)
' 回避方法
Dim rangeGroupModel As FarPoint.Win.Spread.IRangeGroupModel = FpSpread1.ActiveSheet.Models.RangeGroupModel
If rangeGroupModel IsNot Nothing Then
AddHandler rangeGroupModel.Changed, AddressOf RangeGroupModel_Changed
End If
End Sub
Dim tempRangeGroup As Dictionary(Of Integer, RangeGroupInfo()) = New Dictionary(Of Integer, RangeGroupInfo())()
Private Sub RangeGroupModel_Changed(ByVal sender As Object, ByVal e As RangeGroupModelEventArgs)
If e.Type = RangeGroupModelEventType.Expand Then
Dim len As Integer = e.GroupsToExpand.Length
Dim oldRangeGroups As RangeGroupInfo()
For i As Integer = 0 To len - 1
Dim rangeInfo As RangeGroupInfo = e.GroupsToExpand(i)
Dim level As Integer = rangeInfo.Level
If tempRangeGroup.TryGetValue(level, oldRangeGroups) Then
Dim l As Integer = oldRangeGroups.Length
For j As Integer = 0 To l - 1
Dim oldRangeInfo As RangeGroupInfo = oldRangeGroups(i)
If rangeInfo.Start = oldRangeInfo.Start AndAlso rangeInfo.[End] = oldRangeInfo.[End] AndAlso oldRangeInfo.State <> rangeInfo.State Then
Console.WriteLine($"{e.GroupsToExpand(0)}" & "Fire StateChanged event")
If e.GroupsToExpand(0).State = FarPoint.Win.Spread.GroupState.Collapsed Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.GroupsToExpand(0)}" & "Collapsed")
ElseIf e.GroupsToExpand(0).State = FarPoint.Win.Spread.GroupState.Expanded Then
' アウトラインのボタンクリックの確認
Console.WriteLine($"{e.GroupsToExpand(0)}" & "Expanded")
End If
End If
Next
End If
Next
End If
End Sub
Private Sub FpSpread1_MouseDown(sender As Object, e As MouseEventArgs) Handles FpSpread1.MouseDown
tempRangeGroup.Clear()
Dim hitTest As FarPoint.Win.Spread.HitTestInformation = FpSpread1.HitTest(e.X, e.Y)
Dim rangeGroupModel As IRangeGroupModel = FpSpread1.ActiveSheet.Models.RangeGroupModel
If hitTest.Type = HitTestType.RangeGroup Then
tempRangeGroup = New Dictionary(Of Integer, RangeGroupInfo())()
Dim level As Integer = hitTest.RangeGroupInfo.ColumnLevel
If hitTest.RangeGroupInfo.InRowBar OrElse hitTest.RangeGroupInfo.InRowPanel Then
level = hitTest.RangeGroupInfo.RowLevel
End If
For i As Integer = 1 To level
tempRangeGroup.Add(i, rangeGroupModel.GetRangeGroupInfo(i, hitTest.RangeGroupInfo.InRowBar OrElse hitTest.RangeGroupInfo.InRowPanel))
Next
End If
End Sub
End Class
旧文書番号
84818