C#中如何实现撤消?

yydizhu 2010-01-11 10:09:36
我是新手,可以说对这方面一无所知~~~~请大家帮帮忙,我想在C#中点击控件实现撤消功能.
...全文
583 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjnkd 2010-01-14
  • 打赏
  • 举报
回复
关注
yydizhu 2010-01-14
  • 打赏
  • 举报
回复
那么长呀?我还是看不明白~~不好意思~~
chenhong0716 2010-01-14
  • 打赏
  • 举报
回复
public class UndoEngineExt : UndoEngine
{
private System.Collections.Generic.Stack<UndoEngine.UndoUnit> undoStack = new System.Collections.Generic.Stack<UndoEngine.UndoUnit>();
private System.Collections.Generic.Stack<UndoEngine.UndoUnit> redoStack = new System.Collections.Generic.Stack<UndoEngine.UndoUnit>();

public UndoEngineExt(IServiceProvider provider) : base(provider) { }

public bool EnableUndo
{
get { return undoStack.Count > 0; }
}

public bool EnableRedo
{
get { return redoStack.Count > 0; }

}

public void Undo()
{
if (undoStack.Count > 0 )
{
try
{
UndoEngine.UndoUnit unit = undoStack.Pop();

unit.Undo();
redoStack.Push(unit);
}
catch (Exception ex)
{
string msg = ex.Message;
}
}
}

public void Redo()
{
if (redoStack.Count > 0)
{
try
{
UndoEngine.UndoUnit unit = redoStack.Pop();

unit.Undo();
undoStack.Push(unit);
}
catch (Exception ex)
{
string msg = ex.Message;
}
}
}

protected override void AddUndoUnit(UndoEngine.UndoUnit unit)
{
undoStack.Push(unit);
}
}
yydizhu 2010-01-14
  • 打赏
  • 举报
回复
谢谢大家!~`
yydizhu 2010-01-14
  • 打赏
  • 举报
回复
有哪位高手可以给我代码吗?

private void 撤消ToolStripMenuItem_Click(object sender, EventArgs e)
{

}
guyehanxinlei 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mohugomohu 的回复:]
可能要用一个栈把前面的操作保存起来吧
[/Quote]
可行
szyjp 2010-01-11
  • 打赏
  • 举报
回复
学习一下
皮蛋 2010-01-11
  • 打赏
  • 举报
回复
Redo(重做) 和 Undo(撤销)操作管理.
基本做法是定义一个数据结构(类,结构等)描述'操作'。
如果需要实现Redo和Undo则需要定义两个操作链表。
List<操作>:list1----记录正常操作 list2----记录redo和undo的操作。
正常操作时将操作对象记入list1
undo时将list1最后一项弹出并计入list2
redo时将list2最后一项弹出并还原到list1.

我的网盘里收藏了一个老外的UndoRedo库: UndoRedoSolution.zip。
在http://e.ys168.com/?aocdell 里的【Src开源类库收集】目录下.
mohugomohu 2010-01-11
  • 打赏
  • 举报
回复
可能要用一个栈把前面的操作保存起来吧
我在地球 2010-01-11
  • 打赏
  • 举报
回复
do an undo
Cristinays 2010-01-11
  • 打赏
  • 举报
回复
up
yf198557 2010-01-11
  • 打赏
  • 举报
回复
用undo()方法
geniusatm4 2010-01-11
  • 打赏
  • 举报
回复
这个简单说不清楚~借花献佛个别人的链接,希望有帮助
http://www.cnblogs.com/lovecherry/archive/2007/10/17/927678.html
yydizhu 2010-01-11
  • 打赏
  • 举报
回复
谢谢~~不过,我还是不是很明白,可以给我具体的代码吗?或者说得具体一点~~
geniusatm4 2010-01-11
  • 打赏
  • 举报
回复
额。。。如果是windows控件的话,有些自己就带了,比如textbox,什么的
如果是自己window或者控件的功能的话只有自己写了,command模式~do~undo~
wangwfksyc 2010-01-11
  • 打赏
  • 举报
回复
study

111,123

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧