你好,如果通过代码设置 Spread ,直接调用 fpspread.UndoManager.Undo() 是无效的。这是我们就需要通过继承 FarPoint.Win.Spread.UndoRedo.UndoAction 类去自定义 Undo()方法实现该效果,请参考代码:- Public Class clearRangeAction
- Inherits FarPoint.Win.Spread.UndoRedo.UndoAction
- Dim sheetView As FarPoint.Win.Spread.SheetView
- Dim cellRange As FarPoint.Win.Spread.Model.CellRange
- Dim rowInfo As FarPoint.Win.Spread.RowClipInfoRange
- Dim columnInfo As FarPoint.Win.Spread.ColumnClipInfoRange
- Dim cellInfo As FarPoint.Win.Spread.CellInfoRange
- Public Sub New()
- End Sub
- Public Sub New(ByVal sheetView As FarPoint.Win.Spread.SheetView, ByVal cellRange As FarPoint.Win.Spread.Model.CellRange)
- Me.sheetView = sheetView
- Me.cellRange = cellRange
- End Sub
- Public Overrides Function PerformUndoAction(ByVal sender As Object) As Boolean
- Dim spreadView As FarPoint.Win.Spread.SpreadView = Nothing
- If TypeOf sender Is FarPoint.Win.Spread.SpreadView Then
- spreadView = CType(sender, FarPoint.Win.Spread.SpreadView)
- Else
- Return False
- End If
- If sheetView Is Nothing Then
- sheetView = spreadView.GetSheetView
- End If
- If (SaveUndoState()) And Not (sheetView Is Nothing) Then
- sheetView.ClearRange(cellRange.Row, cellRange.Column, cellRange.RowCount, cellRange.ColumnCount, False)
- Return True
- End If
- Return False
- End Function
- Protected Overrides Function SaveUndoState() As Boolean
- If Not (sheetView Is Nothing) Then
- If cellRange Is Nothing Then
- cellRange = sheetView.GetSelection(0)
- If cellRange Is Nothing Then
- cellRange = New FarPoint.Win.Spread.Model.CellRange(sheetView.ActiveRowIndex, sheetView.ActiveColumnIndex, 1, 1)
- End If
- End If
- If Not (cellRange Is Nothing) Then
- If (cellRange.IsValidRange(sheetView, False)) Then
- cellInfo = FarPoint.Win.Spread.CellInfoRange.FromCellRange(sheetView, cellRange, rowInfo, columnInfo)
- End If
- End If
- End If
- Return Not (cellInfo Is Nothing)
- End Function
- Public Overrides Function Undo(ByVal sender As Object) As Boolean
- Dim spreadView As FarPoint.Win.Spread.SpreadView = Nothing
- If TypeOf sender Is FarPoint.Win.Spread.SpreadView Then
- spreadView = CType(sender, FarPoint.Win.Spread.SpreadView)
- Else
- Return False
- End If
- If (cellRange.IsValidRange(sheetView, False)) Then
- If Not (cellInfo Is Nothing) Then
- Dim dataObject As New DataObject()
- dataObject.SetData(cellInfo)
- If Not (columnInfo Is Nothing) Then
- dataObject.SetData(columnInfo)
- End If
- If Not (rowInfo Is Nothing) Then
- dataObject.SetData(rowInfo)
- End If
- If Not (sheetView.ActiveRowIndex = cellRange.Row) Or Not (sheetView.ActiveColumnIndex = cellRange.Column) Then
- sheetView.SetActiveCell(cellRange.Row, cellRange.Column)
- End If
- sheetView.ClipboardPaste(FarPoint.Win.Spread.ClipboardPasteOptions.All, dataObject)
- Return True
- End If
- End If
- Return False
- End Function
- End Class
复制代码 |