请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

chensheng115

初级会员

9

主题

25

帖子

382

积分

初级会员

积分
382

活字格认证

chensheng115
初级会员   /  发表于:2012-1-5 16:16  /   查看:7449  /  回复:7
当我在表格上手动修改单元格内容时,用
fpspread.UndoManager.Undo();没有问题。
但我用 fpspread.ActiveSheet.ClipboardCopy(),和 fpspread.ActiveSheet.ClipboardPaste();两个函数对单元格做的操作,用fpspread.UndoManager.Undo();没有任何反应。请问这是什么原因?
还有我用代码对某个单元格赋值的话,撤销操作也是没有反应的

7 个回复

正序浏览
iceman
社区贡献组   /  发表于:2012-1-9 12:53:00
8#

回复 7# chensheng115 的帖子

不客气,这是我们应该做的~
回复 使用道具 举报
chensheng115
初级会员   /  发表于:2012-1-9 12:49:00
7#

回复 6# iceman 的帖子

太感谢了,问题解决了!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-1-6 10:48:00
6#

回复 4# chensheng115 的帖子

chensheng115  你好,
1. 清除单元格操作可以通过 CellEditUndoAction 实现,代码:

  1.             FarPoint.Win.Spread.UndoRedo.CellEditUndoAction cancelEdit = new FarPoint.Win.Spread.UndoRedo.CellEditUndoAction(fpSpread1_Sheet1, rowindex, columnindex, "", false);
  2.             this.fpSpread1.UndoManager.PerformUndoAction(cancelEdit);
复制代码
2.感谢你的经验分享~
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-1-6 10:39:00
5#

回复 4# chensheng115 的帖子

chensheng115  你好,问题我们已接收,正在处理中,请稍作等待~
回复 使用道具 举报
chensheng115
初级会员   /  发表于:2012-1-6 10:36:00
地板
复制粘贴的撤销可以直接用FarPoint.Win.Spread.UndoRedo.ClipboardPasteUndoAction pasteAction = new FarPoint.Win.Spread.UndoRedo.ClipboardPasteUndoAction(ClipboardPasteOptions.All);
            if (fpspread != null)
                fpspread.UndoManager.PerformUndoAction(pasteAction);
但是没找到清除单元格后的撤销方法,希望有大牛给予帮助
回复 使用道具 举报
chensheng115
初级会员   /  发表于:2012-1-6 09:27:00
板凳

回复 2# iceman 的帖子

谢谢你的帮助,非常感谢,请问有C#写的例子吗?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-1-5 18:45:00
沙发

回复 1# chensheng115 的帖子

你好,如果通过代码设置 Spread ,直接调用 fpspread.UndoManager.Undo() 是无效的。这是我们就需要通过继承 FarPoint.Win.Spread.UndoRedo.UndoAction 类去自定义 Undo()方法实现该效果,请参考代码:
  1. Public Class clearRangeAction
  2.   Inherits FarPoint.Win.Spread.UndoRedo.UndoAction
  3.   Dim sheetView As FarPoint.Win.Spread.SheetView
  4.   Dim cellRange As FarPoint.Win.Spread.Model.CellRange
  5.   Dim rowInfo As FarPoint.Win.Spread.RowClipInfoRange
  6.   Dim columnInfo As FarPoint.Win.Spread.ColumnClipInfoRange
  7.   Dim cellInfo As FarPoint.Win.Spread.CellInfoRange
  8.   Public Sub New()
  9.   End Sub
  10.   Public Sub New(ByVal sheetView As FarPoint.Win.Spread.SheetView, ByVal cellRange As FarPoint.Win.Spread.Model.CellRange)
  11.     Me.sheetView = sheetView
  12.     Me.cellRange = cellRange
  13.   End Sub
  14.   Public Overrides Function PerformUndoAction(ByVal sender As Object) As Boolean
  15.     Dim spreadView As FarPoint.Win.Spread.SpreadView = Nothing
  16.     If TypeOf sender Is FarPoint.Win.Spread.SpreadView Then
  17.       spreadView = CType(sender, FarPoint.Win.Spread.SpreadView)
  18.     Else
  19.       Return False
  20.     End If
  21.     If sheetView Is Nothing Then
  22.       sheetView = spreadView.GetSheetView
  23.     End If
  24.     If (SaveUndoState()) And Not (sheetView Is Nothing) Then
  25.       sheetView.ClearRange(cellRange.Row, cellRange.Column, cellRange.RowCount, cellRange.ColumnCount, False)
  26.       Return True
  27.     End If
  28.     Return False
  29.   End Function
  30.   Protected Overrides Function SaveUndoState() As Boolean
  31.     If Not (sheetView Is Nothing) Then
  32.       If cellRange Is Nothing Then
  33.         cellRange = sheetView.GetSelection(0)
  34.         If cellRange Is Nothing Then
  35.           cellRange = New FarPoint.Win.Spread.Model.CellRange(sheetView.ActiveRowIndex, sheetView.ActiveColumnIndex, 1, 1)
  36.         End If
  37.       End If
  38.       If Not (cellRange Is Nothing) Then
  39.         If (cellRange.IsValidRange(sheetView, False)) Then
  40.           cellInfo = FarPoint.Win.Spread.CellInfoRange.FromCellRange(sheetView, cellRange, rowInfo, columnInfo)
  41.         End If
  42.       End If
  43.     End If
  44.     Return Not (cellInfo Is Nothing)
  45.   End Function
  46.   Public Overrides Function Undo(ByVal sender As Object) As Boolean
  47.     Dim spreadView As FarPoint.Win.Spread.SpreadView = Nothing
  48.     If TypeOf sender Is FarPoint.Win.Spread.SpreadView Then
  49.       spreadView = CType(sender, FarPoint.Win.Spread.SpreadView)
  50.     Else
  51.       Return False
  52.     End If
  53.     If (cellRange.IsValidRange(sheetView, False)) Then
  54.       If Not (cellInfo Is Nothing) Then
  55.         Dim dataObject As New DataObject()
  56.         dataObject.SetData(cellInfo)
  57.         If Not (columnInfo Is Nothing) Then
  58.           dataObject.SetData(columnInfo)
  59.         End If
  60.         If Not (rowInfo Is Nothing) Then
  61.           dataObject.SetData(rowInfo)
  62.         End If
  63.         If Not (sheetView.ActiveRowIndex = cellRange.Row) Or Not (sheetView.ActiveColumnIndex = cellRange.Column) Then
  64.           sheetView.SetActiveCell(cellRange.Row, cellRange.Column)
  65.         End If
  66.         sheetView.ClipboardPaste(FarPoint.Win.Spread.ClipboardPasteOptions.All, dataObject)
  67.         Return True
  68.       End If
  69.     End If
  70.     Return False
  71.   End Function
  72. End Class
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部