作成日: 2018/06/22 最終更新日: 2018/06/22
文書種別
不具合
状況
修正済み
詳細
■事象
フォーカスがセルのエディタにある状態(セルが編集中)を表すWhenAncestorOfFocused入力マップについて、以下の切り取りアクションを割り当てると、エスケープ時にセルの値が消えます。
■サンプルコード(VB.NET)
■再現手順
1. "A1"セルをダブルクリックし、編集モードにします。
2. 「Ctrl+X」キーを押します。
3. 「Esc」キーを押します。
→編集モードが終了し、セル内の値が消えます。
フォーカスがセルのエディタにある状態(セルが編集中)を表すWhenAncestorOfFocused入力マップについて、以下の切り取りアクションを割り当てると、エスケープ時にセルの値が消えます。
- ClipboardCutAsString
- ClipboardCutAsStringSkipHidden
- ClipboardCutDataOnly
- ClipboardCutValues
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' セルに値を設定します。
FpSpread1.Sheets(0).Cells(0, 0).Text = "abcdef"
' 入力マップをカスタマイズします。
' (編集中の「Ctrl+X」を"文字列として切り取り"に設定する。)
Dim im As FarPoint.Win.Spread.InputMap
im = FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.X, Keys.Control), FarPoint.Win.Spread.SpreadActions.ClipboardCutAsString)
End Sub
' セルに値を設定します。
FpSpread1.Sheets(0).Cells(0, 0).Text = "abcdef"
' 入力マップをカスタマイズします。
' (編集中の「Ctrl+X」を"文字列として切り取り"に設定する。)
Dim im As FarPoint.Win.Spread.InputMap
im = FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.X, Keys.Control), FarPoint.Win.Spread.SpreadActions.ClipboardCutAsString)
End Sub
■再現手順
1. "A1"セルをダブルクリックし、編集モードにします。
2. 「Ctrl+X」キーを押します。
3. 「Esc」キーを押します。
→編集モードが終了し、セル内の値が消えます。
回避方法
Service Pack 3(v10.0.4007.2012)で修正済み。
Service Pack を適用せずに対処する方法としては、カスタマイズしたアクションを入力マップに割り当てる方法が有効です。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する方法としては、カスタマイズしたアクションを入力マップに割り当てる方法が有効です。
■サンプルコード(VB.NET)
Imports FarPoint.Win.Spread
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' カスタマイズしたアクションをアクションマップに追加します。
Dim am As ActionMap = FpSpread1.GetActionMap()
am.Put("CustomClipboardCutAction", New CustomClipboardCutAction)
' キー操作とカスタマイズしたアクションをマッピングします。
Dim im As FarPoint.Win.Spread.InputMap
im = FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.X, Keys.Control), "CustomClipboardCutAction")
End Sub
End Class
' カスタマイズしたアクション
Public Class CustomClipboardCutAction
Inherits UndoRedo.ClipboardCutUndoAction
Private inEditMode As Boolean
Public Overrides Function PerformUndoAction(ByVal sender As Object) As Boolean
If TypeOf sender Is SpreadView Then
Dim spread As FpSpread = CType(sender, SpreadView).Owner
inEditMode = spread.EditMode
If (inEditMode) Then
Return False
Else
Return MyBase.PerformUndoAction(sender)
End If
End If
Return False
End Function
Public Overrides Function Undo(ByVal sender As Object) As Boolean
If (inEditMode) Then
Return False
Else
Return MyBase.Undo(sender)
End If
End Function
End Class
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' カスタマイズしたアクションをアクションマップに追加します。
Dim am As ActionMap = FpSpread1.GetActionMap()
am.Put("CustomClipboardCutAction", New CustomClipboardCutAction)
' キー操作とカスタマイズしたアクションをマッピングします。
Dim im As FarPoint.Win.Spread.InputMap
im = FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.X, Keys.Control), "CustomClipboardCutAction")
End Sub
End Class
' カスタマイズしたアクション
Public Class CustomClipboardCutAction
Inherits UndoRedo.ClipboardCutUndoAction
Private inEditMode As Boolean
Public Overrides Function PerformUndoAction(ByVal sender As Object) As Boolean
If TypeOf sender Is SpreadView Then
Dim spread As FpSpread = CType(sender, SpreadView).Owner
inEditMode = spread.EditMode
If (inEditMode) Then
Return False
Else
Return MyBase.PerformUndoAction(sender)
End If
End If
Return False
End Function
Public Overrides Function Undo(ByVal sender As Object) As Boolean
If (inEditMode) Then
Return False
Else
Return MyBase.Undo(sender)
End If
End Function
End Class
旧文書番号
82896