C#撤销实现(1)

最开始是因为公司产品里面没有撤销功能,所以也找了一些代码来看

主要参看了FastReport (因为以前是写Delphi比较熟悉这个)

后来又看到Paint.Net 的代码,

里面写得不错,扩展性和性能结合得很好

在撤销方面,里面实现了一个历史记录类,使用备忘录模式,操作前的内容记录下来,放到了临时文件中

下一次再详细说明这个模式

时间: 2024-09-28 20:43:42

C#撤销实现(1)的相关文章

C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能

.Net为我们提供了众多的泛型集合.比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T>,双向链表的泛型实现,不支持索引;ISet<T>不允许被复制,他有2个实现,一个是HashSet<T>,不维持集合元素的排序,另一个是SortedSet<T>,支持集合元素的排序;IDictionary<TKey, TValue>是一个字典集合的泛型接口

Extjs 4.2 树结点右键菜单(全选,反选,撤销)

自己写的最新版本extjs4.2的树结点的操作,记录一下,以后可能会用到. var tree = new Ext.tree.TreePanel({ flex: 1, animate: true, autoScroll: true, anchor: '100% 93%', store: new Ext.data.TreeStore({ root:{ expanded: true, text:'A', children:[{ expanded: true, text:'1', children:[{

git撤销操作

在本地更改了文件 用 git status 命令是能看到更改了哪些文件的 显示为红色修改的文件,接下来 git add <filename> 将修改的这个文件添加到暂存区 显示为绿色,通过git reset HEAD --<filename>  将通过 git add 添加的文件从缓冲区撤销 会重新变为红色 再通过 git checkout -- <filename>  撤销工作区的修改,回到你没有修改过的地方.同时这个命令可以用于你不小心改了好多你不想提交的文件,让文

如何撤销浏览器注入JS代码的执行效果?

如何撤销浏览器注入JS代码的执行效果? 可用的方法: 放弃所有本地修改,整体重新reload当前的URL(这相当于大粒度的savepoint/snapshot,应确保用户数据/视图状态能够按期望恢复) 内核实现immutable的DOM树,对DOM树的每个修改均产生一个新的版本快照,修改可以直接回退,比如提供一个document.revertTo方法 immutable数据结构上实现MVCC事务,事务本身的执行是原子的,但是并没有考虑用户如何手工反转事务 实现细粒度的对应每个业务逻辑层次写操作的

C#/VB.NET 给Word文档添加/撤销书签

在现代办公环境中,阅读或者编辑较长篇幅的Word文档时,想要在文档中某一处或者几处留下标记,方便日后查找.修改时,需要在相对应的文档位置插入书签.那对于开发者而言,在C#或者VB.NET语言环境中,如何来快速.简便的插入书签呢,我分享一下我的经验.这里我用到了一款E-iceblue公司发布的一款免费的Word组件(Free Spire.Doc for .NET),方法很简单,如下: 步骤一:初始化Document实例并加载Word文档 Document document = new Docume

Swift3.0学习实践-一个简单的画板(七色轨迹、可撤销、可清除、带橡皮擦)

写着玩儿的小程序,继续学习Swift.运行效果+代码+知识点总结 运行效果:             代码: Canvas类:画布,画图板状态管理.交互.处理手势 [plain] view plain copy class Canvas:UIView{ //负责线条的生成.操作与管理 let pathCreator:PathCreator //是否处于擦除状态 var isInErasering:Bool //橡皮擦视图 let eraserView:UIView override init(f

git基础③撤销修改

git跟踪并管理的不是文件,而是修改,可以把创建一次文件也看做修改  文件只要没有git add添加到暂存区,系统默认还是在工作区, 那么commit是不能提交到目录树分支的 撤销修改的内容 1.错误发现的及时,只要把文件回退到上一个版本的转态就好. 2.丢弃工作区的修改: git checkout -- 加文件名   git checkout -- 1.php 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

GIT笔记(1) GIT的入门(创建,修改,撤销,删除)

一)GIT的创建 1.首先建立工作区 Mkdir learngit Cd learngit Pwd 2.通过git 的初始化建立使其变成仓库 a) git init() Initialized empty Git repository in /Users/michael/learngit/.git/ 一般情况下会出现.git的目录.用来跟踪管理版本库(一般是隐藏的要用lis -ah看到) 二)GIT的划分 1   GIT划分为版本库与工作区. 1)工作区 一般就是平时看到的目录,如learngi

Oracle创建、管理撤销表空间

撤销管理模式: 用户通过设定撤销管理模式(undo mode)就可以灵活地选择使用手动撤销管理(manual undo management)或自动撤销管理(automatic undo management).数据库系统既可以运行在手动撤销管理模式下,也可以运行于自动撤销管理模式下.在手动撤销管理模式下,撤销空间通过回滚段(rollback segment)管理.在自动撤销管理模式下,撤销空间通过撤销表空间(undo tablespace)管理.如需使用自动撤销管理模式,数据库管理员只需为每个

Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突

Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目讲的,上篇主要是说用GUI来图形化界面操作,但是一般我们程序员也不会这么干,用命令又轻松又愉悦,所以,这里我就再开了一篇来专门说一下纯命令是怎么去操作的,但是要注意哦,其实廖雪峰老师的网站就是非常赞的学习资源哦! 廖雪峰老师:http://www.li