C# Winform怎么显示所有撤销操作的命令列表,类似于Word里那种
以RichTextBox为例,RichTextBox的撤销命令,只有RichTextBox.UndoActionName方法,用来获取上一步撤销命令的文本提示,但是如果我...
以RichTextBox为例,RichTextBox的撤销命令,只有RichTextBox.UndoActionName方法,用来获取上一步撤销命令的文本提示,但是如果我要获取之前若干项(先假设为10项)的撤销命令文本,应该如何做呢?
请懂的高手们不吝赐教!谢谢!
我可以通过按钮事件获取之前操作的每一步,例如文字被加粗、倾斜、缩进、更改对齐方式等,可以通过程序在命令列表中写入这些步骤,但是如果文字被修改,比如键入文字,删除文字就没法识别了。。。 展开
请懂的高手们不吝赐教!谢谢!
我可以通过按钮事件获取之前操作的每一步,例如文字被加粗、倾斜、缩进、更改对齐方式等,可以通过程序在命令列表中写入这些步骤,但是如果文字被修改,比如键入文字,删除文字就没法识别了。。。 展开
1个回答
展开全部
思路:
先定义一个枚举,列出所有操作
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命令
先定义一个枚举,列出所有操作
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命令
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询