`
bmqnc
  • 浏览: 126048 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

今天自己做了redo-undo功能

    博客分类:
  • java
阅读更多
现在的项目中有一个文本编辑器(类似记事本的),是之前的程序员写的,他是自己管理redo-undo栈,我看了一下,根本没法用那个redo-undo功能(只能redo-undo一次,晕死),而且其中的逻辑超级乱。

我改写了一下,代码还算简洁,由于是公司的项目,我不能贴代码,只能讲讲我实现的思路。

具体就是在编辑框输入的同时,将前面的输入压到undo栈,但要注意,当前在文本框的文本应该将其入redo栈。

每次编辑框发生修改时,undo栈压入的是redo栈的top元素,然后当前编辑框中的文本再入redo栈。但要注意的是编辑框刚打开时是有初始化值的(类似记事本打开一个txt文件,txt中本身存在内容),因此一开始的时候这个初始值是要压入到undo栈而不能压入到redo栈。

做undo的时候注意undo栈不能一直pop,因为undo的底元素师文本框的初始值。
而redo的时候redo栈也不能一直pop,因为redo栈的顶元素是最后修改键入的那个元素。

而文本框显示的值是redo或者undo的最新值。当然,这个值如前面所说,是栈里面的元素,可能这个元素是栈中弹出的元素,也可能只是取栈顶的元素(看是否到达了redo-undo栈的size为1)。
分享到:
评论
2 楼 bmqnc 2010-12-24  
cqh520llr 写道
sb,不帖代码,以后人家搜索到了浪费人家时间,而且这个代码贴出来以后自己也方便查找


你Y的,你才sb,这是公司的代码我能随便发吗?

不过可以写伪代码倒是真的。
1 楼 cqh520llr 2010-11-09  
sb,不帖代码,以后人家搜索到了浪费人家时间,而且这个代码贴出来以后自己也方便查找

相关推荐

    undo-redo-vuex:一个Vuex插件,用于模块命名空间的撤消和重做功能

    src =" node_modules/undo-redo-vuex/dist/undo-redo-vuex.min.js " > </ script > 模块 import undoRedo from "undo-redo-vuex" ; 用法 作为的标准, undo-redo-vuex可以用于以下设置: 如何在商店模块中...

    C#做的简单的Undo、Redo功能的实现

    在编程领域,撤销(Undo)和重做(Redo)功能是用户界面中常见的操作,它们允许用户取消或恢复最近的更改。在C#中,我们可以利用.NET框架提供的事件驱动和面向对象特性来实现这样的功能。这篇实验主要探讨了如何在...

    redux-undo-redo:undo redo软件包,用于redux

    redux-undo-redo 用于Redux的撤消重做软件包 该软件包的灵感主要来自开发的。 该软件包将还原重做历史记录添加到还原状态。 对于每个不可撤消的操作,您必须提供其还原操作。 它还支持分组操作,使您可以一步一步...

    C# undo\redo框架

    本文将深入探讨“C# undo/redo框架”的核心概念、设计模式以及如何实现。 1. **命令模式**: 撤销/重做框架通常基于命令模式设计。命令模式是一种行为设计模式,将请求封装为一个对象,使发出请求与执行请求解耦。...

    oracle_redo_undo

    Oracle Redo 和 Undo Mechanism Oracle 中的 redo 和 undo 机制是数据库的核心组件,它们一起协作以确保数据库的事务一致性和可靠性。在本文中,我们将深入探讨 redo 和 undo 机制的工作原理和协作机制。 Undo ...

    RAC下的REDO和UNDO管理

    与REDO日志类似,每个RAC实例都有自己的UNDO段,可以通过`undo_tablespace`参数指定。UNDO数据存储在共享存储中,确保在一致性读取和恢复过程中,即使某个节点出现故障,其他节点仍然可以访问所需的UNDO信息。这保证...

    patrones-mastermind-undo-redo-kiarras:patrones-mastermind-undo-redo-kiarras由GitHub Classroom创建

    Estées elcódigodel Mastermind con latécnicadel doble despacho,Sobre el que agregaremos los patrones y funcionalida necesaria para und Undo / Redo con undiseñoCorrecto。 先决条件再录取通知书...

    C#实现的undo/redo的window窗体

    针对一个window窗体实现了undo/redo功能,包括textBox,checkBox, listBox, comboBox, radioButton以及按钮焦点变化的实现。可能有些小bug思路仅供参考。完整的工程文件,VS打开即可运行,欢迎评论~ 详细说明参见...

    use-undo:React Hooks实现撤消和重做功能

    使用React 撤消/重做功能。 安装 yarn add use-undo 用法 import React from 'react' ; import ReactDOM from 'react-dom' ; import useUndo from 'use-undo' ; const App = ( ) => { const [ countState , { ...

    use-simple-undo-源码.rar

    这个压缩包文件"use-simple-undo-源码.rar"包含的就是Simple Undo库的源代码,通过分析这些源码,我们可以深入理解其工作原理和使用方法。 首先,Simple Undo的核心思想是基于命令模式(Command Pattern),这是一...

    mfc support redo/undo

    本文将深入探讨如何在MFC应用中实现撤销(Undo)和重做(Redo)功能,这对于任何具有用户交互性的软件都是至关重要的特性。 撤销/重做功能是许多应用程序的标准组成部分,允许用户取消他们的最近操作,并在需要时...

    Multiple Level Undo/Redo多级Undo/Redo功能的实现(7KB)

    这一功能允许用户在执行一系列操作后,通过撤销(Undo)来回溯到历史状态,或通过重做(Redo)恢复之前撤销的操作。本文将详细探讨多级撤销/重做的实现原理以及在实际应用中的具体实现。 首先,理解多级撤销/重做的...

    QT撤消操作(undo/redo)例子

    本工程用vs2008打开,但需要qt库的支持,需要先安装qt-in-vs2008,才可通过编译。或者直接将里面的代码拷贝出来,然后在自己的环境中编译也行。代码中应用了QUndoCommand来实现撤销与反撤销操作。

    多步Undo_Redo的实现

    在现代软件开发中,尤其是图形编辑或文档编辑应用程序中,Undo/Redo功能是用户体验的重要组成部分。它不仅提高了用户的工作效率,还能增强软件的易用性。在本篇文章中,我们将深入探讨如何在MFC(Microsoft ...

    undo-通过动态调度提供简单的undo-redo功能-Rust开发

    undo通过动态调度提供简单的undo-redo功能。 它是命令模式的一种实现,其中所有修改都已完成。b undo提供具有动态调度功能的简单undo-redo功能。 它是命令模式的一种实现,其中所有修改都是通过创建应用修改的命令...

    redo与undo_a.pdf11

    a.pdf"很可能是关于这个主题的一个详细教程或研究报告,可能涵盖了如何配置和管理redo日志文件,如何使用undo来支持事务的ACID属性(原子性、一致性、隔离性和持久性),以及如何在Oracle数据库中实现这些功能的具体...

    Undo-Redo-CircularBuffer:构造函数分配的CircularBuffer,能够进行零分配的撤消和重做操作

    git submodule add https://github.com/mgood7123/Undo-Redo-CircularBuffer path/where/Undo-Redo-CircularBuffer/should/reside/Undo-Redo-CircularBuffer git submodule update --init --recursive 建立和测试 ...

    redo undo framework source code

    在IT行业中,"redo undo"框架是用于实现撤销/重做功能的核心技术,常见于各种软件和应用程序中,如文本编辑器、图像处理软件、数据库系统等。它允许用户取消最近的操作并恢复先前的状态,提供了对用户交互的强大支持...

    实现Redo Undo的一个简单实例,包含源码

    在IT行业中,"Redo"和"Undo"功能是用户界面设计中的重要组成部分,尤其是在文本编辑器、图形编辑软件或任何允许用户进行可逆操作的应用程序中。它们为用户提供了一种方便的方式来撤销或恢复之前的改动,增加了用户...

Global site tag (gtag.js) - Google Analytics