撤消按钮 VSTO 的所有操作
Undo all actions of a button VSTO
我正在开发一个 MS Word 加载项,所以我添加了一个触发功能的按钮:
private void button1_Click(object sender, RibbonControlEventArgs e) {
// do some actions on a word document (text - formatting - ...) here.
}
我的问题是,当函数对 word 文档执行 n
操作时,我必须单击撤消 n
次才能撤消所有按钮操作。将 return 撤消到原始状态(文本 - 格式 - ... 等)10 或 100 次是一种糟糕的用户体验。
有没有什么方法可以将所有按钮操作打包为撤消堆栈中的一个操作,这样我就可以通过单击或 Ctrl + z
撤消按钮效果?
重要提示:
另一种 对我有用 的方法是:
- 打开 temp 文档。
- 将原始文档复制到临时文档。
- 对 temp 文档进行所有编辑(
n
对其采取的操作)。
- 将 temp 文档复制回 原始 文档(只执行了一项操作,即
paste
,因此我可以撤消它).
这就是我在第二种方法中挣扎的原因:check here
这个 Whosebug 答案应该能为您指明正确的方向。
Save undo stack during macro run
您可以将所有内容包装在自定义撤消记录中 - 这样您只需撤消一次即可撤消所有内容。
Visual Basic:
Application.UndoRecord.StartCustomRecord "Title of undo-record here"
Application.ScreenUpdating = False ' Optional, reduces screen flicker during operations.
'--- Your code here
Application.ScreenUpdating = True ' Optional, but required if set to false above
Application.UndoRecord.EndCustomRecord
' After this, you can undo once to undo it all.
C#:
Application.UndoRecord.StartCustomRecord "Title of undo-record here";
Application.ScreenUpdating = false; // Optional, reduces screen flicker during operations.
//--- Your code here
Application.ScreenUpdating = true; // Optional, but required if set to false above
Application.UndoRecord.EndCustomRecord;
// After this, you can undo once to undo it all.
我正在开发一个 MS Word 加载项,所以我添加了一个触发功能的按钮:
private void button1_Click(object sender, RibbonControlEventArgs e) {
// do some actions on a word document (text - formatting - ...) here.
}
我的问题是,当函数对 word 文档执行 n
操作时,我必须单击撤消 n
次才能撤消所有按钮操作。将 return 撤消到原始状态(文本 - 格式 - ... 等)10 或 100 次是一种糟糕的用户体验。
有没有什么方法可以将所有按钮操作打包为撤消堆栈中的一个操作,这样我就可以通过单击或 Ctrl + z
撤消按钮效果?
重要提示:
另一种 对我有用 的方法是:
- 打开 temp 文档。
- 将原始文档复制到临时文档。
- 对 temp 文档进行所有编辑(
n
对其采取的操作)。 - 将 temp 文档复制回 原始 文档(只执行了一项操作,即
paste
,因此我可以撤消它).
这就是我在第二种方法中挣扎的原因:check here
这个 Whosebug 答案应该能为您指明正确的方向。
Save undo stack during macro run
您可以将所有内容包装在自定义撤消记录中 - 这样您只需撤消一次即可撤消所有内容。
Visual Basic:
Application.UndoRecord.StartCustomRecord "Title of undo-record here"
Application.ScreenUpdating = False ' Optional, reduces screen flicker during operations.
'--- Your code here
Application.ScreenUpdating = True ' Optional, but required if set to false above
Application.UndoRecord.EndCustomRecord
' After this, you can undo once to undo it all.
C#:
Application.UndoRecord.StartCustomRecord "Title of undo-record here";
Application.ScreenUpdating = false; // Optional, reduces screen flicker during operations.
//--- Your code here
Application.ScreenUpdating = true; // Optional, but required if set to false above
Application.UndoRecord.EndCustomRecord;
// After this, you can undo once to undo it all.