关于撤销、恢复的基本想法
涉及《数据结构》--创建堆栈记录步骤
我们知道,应用程序在每次操作后都改变着它的状态。由于程序本身一直被用户操作着,它的状态也在一直改变中。撤销操作就是回到上一个操作后的状态,因此,为了实现撤消操作,我们必须存储程序使用中的每一个状态。而恢复操作就是从之前一个状态切换至下一个状态。
为了实现撤销、恢复功能,我们需要为撤销功能存储上一个操作后的状态信息,还需要为恢复功能存储下一个操作后的状态信息,也就是我们必须维护应用程序的多个状态。为了在各种操作和各种实现中维护应用程序的状态,我们使用两个内存堆栈。一个存储撤销操作的状态,一个存储恢复操作的状态。撤消操作通过从撤销堆栈中弹出一个状态来回到前一个程序运行状态,同样,恢复操作通过从恢复堆栈中弹出一个状态来进入下一个程序运行状态。
现在我们了解到,为了实现撤销、恢复操作,关键问题就在于如何保持并维护应用程序运行中的各种状态。在这篇文章的方法中,每次单一的操作导致的变化被记录成为一个状态,这个状态变更保存在一个对象中,这个对象用来保存所有类型的操作中需要保存的数据,所以这个对象中的很多属性对于特定操作是冗余的。
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
待续…… (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|