C# Winform怎么显示所有撤销操作的命令列表,类似于Word里那种

以RichTextBox为例,RichTextBox的撤销命令,只有RichTextBox.UndoActionName方法,用来获取上一步撤销命令的文本提示,但是如果我... 以RichTextBox为例,RichTextBox的撤销命令,只有RichTextBox.UndoActionName方法,用来获取上一步撤销命令的文本提示,但是如果我要获取之前若干项(先假设为10项)的撤销命令文本,应该如何做呢?
请懂的高手们不吝赐教!谢谢!
我可以通过按钮事件获取之前操作的每一步,例如文字被加粗、倾斜、缩进、更改对齐方式等,可以通过程序在命令列表中写入这些步骤,但是如果文字被修改,比如键入文字,删除文字就没法识别了。。。
展开
 我来答
lnlllnnhf
2014-01-10 · TA获得超过249个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:195万
展开全部
思路:
先定义一个枚举,列出所有操作
enum ActionType{ Bold,QingXie,SuoJin,DuiQi,AddString,DeleteString}

添加一个类 负责保存所有操作状态和操作对象信息
public Class ActionInfo
{
ActionType at,String affectString,Point strStartLocation //这里是操作信息
上面的 Point肯定不对,不替你想了
public void UndoAction(){//这里写具体撤销操作 ,ctrl z} //这里用到很多if else或者switch,需设计模式解决
public void DoAction() {//这里执行操作 ,ctrl y}
}

So,需要一个类管理ActionInfo和一个枚举
public enum Command {Undo,Redo}
public class ActionStack
{
int currentActionPos = 0; //当前是哪个ActionInfo
List<ActionInfo> actions;
public void Add(ActionInfo action)
{//添加一个命令后 ctrl y就无效了,所以用currentActionPos来标识最后一个ctrl z 的位置
actions清楚无效的ActionInfo}

public void Execute(Command cmd) //ctrl z 传递Undo,ctrl y传递 Redo
{ 更改currentActionPos 调用action[currentActionPos] 的UndoAction或者DoAction方法
}
}

使用:执行任何操作完成后 构建ActionInfo 并加入ActionStack中
相应ctrl z ctrl y事件 调用ActionStack的Execute命令
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式