撤消按钮 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 撤消按钮效果?

重要提示:

另一种 对我有用 的方法是:

这就是我在第二种方法中挣扎的原因: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.