找回密码
 立即注册

QQ登录

只需一步,快速开始

jplzj
论坛元老   /  发表于:2011-3-8 13:58  /   查看:7797  /  回复:7
我想在用户DragFillBlock时执行我定义的CellDragFillUndoAction代码如下,经测试为何其不执行??
Private Sub FpSpread_DragFillBlock(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.DragFillBlockEventArgs) Handles FpSpread.DragFillBlock
        Select Case e.Direction
            Case FarPoint.Win.Spread.FillDirection.Left
                '  FpSpread.UndoManager.Undo()
              
               
            Case FarPoint.Win.Spread.FillDirection.Right

            
            Case FarPoint.Win.Spread.FillDirection.Down

               
                    e.Cancel = True
              
                                              FpSpread.UndoManager.PerformUndoAction(New FarPoint.Win.Spread.UndoRedo.CellDragFillUndoAction(FpSpread.ActiveSheet, 0, 19, 2, 2, 4, FarPoint.Win.Spread.FillDirection.Down, False))                  
            Case FarPoint.Win.Spread.FillDirection.Up

               
        End Select


    End Sub

7 个回复

倒序浏览
gw0506
超级版主   /  发表于:2011-3-8 14:17:00
沙发
有没有打开AllowUndo开关?
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2011-3-8 14:23:00
板凳
打开了,这段红色代码不放在这个事件里面都能执行!
回复 使用道具 举报
gerry
论坛元老   /  发表于:2011-3-8 14:25:00
地板
  1. Select Case e.Direction
  2.     Case FarPoint.Win.Spread.FillDirection.Left
  3.     '  FpSpread.UndoManager.Undo()
  4.     Case FarPoint.Win.Spread.FillDirection.Right
  5.    
  6.     Case FarPoint.Win.Spread.FillDirection.Down
  7.    
  8.             e.Cancel = True
  9.                         '修改了这里
  10.             Dim ap = FpSpread.UndoManager.GetActionPending()
  11.             FpSpread.UndoManager.PerformUndoAction(ap)   
  12.             '.PerformUndoAction(new FarPoint.Win.Spread.UndoRedo.CellDragFillUndoAction(fpSpread1.ActiveSheet, 0, 19, 2, 2, '4, FarPoint.Win.Spread.FillDirection.Down, false));)                        
  13.    
  14.     Case FarPoint.Win.Spread.FillDirection.Up
  15.    
  16.    
  17. End Select
复制代码
回复 使用道具 举报
gerry
论坛元老   /  发表于:2011-3-8 14:31:00
5#
PerformUndoAction时 所传参数应该从已有的UndoList中得到.如上面修改的代码 应该可以达到您的要求
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2011-3-8 14:52:00
6#
谢谢,又学到了新东西
但是,我是用 e.Cancel = True 取消DragFillBlock操作,然后用这段代码FpSpread.UndoManager.PerformUndoAction(New FarPoint.Win.Spread.UndoRedo.CellDragFillUndoAction(FpSpread.ActiveSheet, 0, 19, 2, 2, 4, FarPoint.Win.Spread.FillDirection.Down, False))      
实现一个新的DragFillBlock操作,并加入FpSpread.UndoManager中
回复 使用道具 举报
gerry
论坛元老   /  发表于:2011-3-8 16:29:00
7#
Dim action As Action = New FarPoint.Win.Spread.UndoRedo.CellEditUndoAction(fpSpread1_Sheet1, 0, 0, "hello", False)
action.PerformAction(fpSpread1_Sheet1.ContainingViews(0))
action = New CellDragFillUndoAction(fpSpread1.ActiveSheet, 0, 0, 1, 1, 2, _
        FillDirection.Right, True)
action.PerformAction(fpSpread1_Sheet1.ContainingViews(0))


我明白你的意思了 请参考如上实现 直接使用action下的PerformAction方法
其中参数为SpreadView类型 填sheet下的ContainingViews(0)就可以了
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2011-3-8 16:42:00
8#
谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部