关于撤销、恢复的基本想法

关于撤销、恢复的基本想法

涉及《数据结构》--创建堆栈记录步骤

 

我们知道,应用程序在每次操作后都改变着它的状态。由于程序本身一直被用户操作着,它的状态也在一直改变中。撤销操作就是回到上一个操作后的状态,因此,为了实现撤消操作,我们必须存储程序使用中的每一个状态。而恢复操作就是从之前一个状态切换至下一个状态。

为了实现撤销、恢复功能,我们需要为撤销功能存储上一个操作后的状态信息,还需要为恢复功能存储下一个操作后的状态信息,也就是我们必须维护应用程序的多个状态。为了在各种操作和各种实现中维护应用程序的状态,我们使用两个内存堆栈。一个存储撤销操作的状态,一个存储恢复操作的状态。撤消操作通过从撤销堆栈中弹出一个状态来回到前一个程序运行状态,同样,恢复操作通过从恢复堆栈中弹出一个状态来进入下一个程序运行状态。

现在我们了解到,为了实现撤销、恢复操作,关键问题就在于如何保持并维护应用程序运行中的各种状态。在这篇文章的方法中,每次单一的操作导致的变化被记录成为一个状态,这个状态变更保存在一个对象中,这个对象用来保存所有类型的操作中需要保存的数据,所以这个对象中的很多属性对于特定操作是冗余的。

 

VB模拟撤销代码(转载)

Dim back1$, back2$ '撤消使用的字符串记录
Dim backsw1 As Boolean, backsw2 As Boolean, backsw3 As Boolean '撤消使用过程中的开关
                                                               'sw1是用来判断是否更新原记录back1的
                                                               'sw2是用来抵制由于撤消操作引起的text改变而使back1重新赋值的
                                                               'sw3是专门判断按下backspace时是否需要更新back1,2的
Private Sub Form_Load()

back1 = Text1
back2 = Text1
backsw1 = True     'sw1是用来判断是否更新原记录back1的
backsw2 = True     'sw2是用来抵制由于撤消操作引起的text改变而使back1重新赋值的
backsw3 = True
end sub

 

Private Sub muback_Click()
'撤消
    Dim backtem$
    backtem = back1
    back1 = back2
    back2 = backtem
    backsw2 = False 'sw2是用来抵制由于撤消操作引起的text改变而使back1重新赋值的
    Text1 = back2
    backsw2 = True
    backsw1 = False 'sw1是用来判断是否更新原记录back1的
    backsw3 = True   'sw3是专门判断按下backspace时是否需要更新back1,2的
End Sub
Private Sub text1_change()
'撤消所需的监视记事本的变动
    If backsw2 = True Then
        If backsw1 = False Then
            back1 = back2
        End If
        back2 = Text1
        backsw1 = True
    End If
    backsw0 = True
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'实现用backspace删除字符后能够撤消删除的字符
    If KeyCode = 8 Then
        backsw2 = True
        If backsw3 = True Then
            backsw1 = False
        End If
        backsw3 = False
    End If
End Sub

 

 

待续……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值