VSTO Pluging: Copying format restarts a custom undo record

Kirill Lapshin 0 Reputation points
2024-08-16T16:58:10.2066667+00:00

We are developing a Word add-in using VSTO and have encountered an issue with a custom UndoRecord. The problem arises when we use the CopyFormat method between the StartCustomRecord and EndCustomRecord method calls. Executing CopyFormat causes the existing UndoRecord to close and a new one to start, resulting in an additional record appearing in the undo stack, which is not the desired behaviour.

Here is a simplified version of the method we are using:

csharpCopy code
private static void PasteRtf(string rtf, Range sourceRange, Range targetRange)
{
    var undoRecord = sourceRange.Application.UndoRecord;
    try
    {
        undoRecord.StartCustomRecord("Custom record");

        targetRange.InsertParagraphBefore();
        targetRange = targetRange.Paragraphs.First.Range;

        System.Windows.Clipboard.Clear();
        System.Windows.Clipboard.SetData(System.Windows.DataFormats.Rtf, rtf);
        targetRange.Paste();

        sourceRange.Select();
        sourceRange.Application.Selection.CopyFormat();
        targetRange.Select();
        targetRange.Application.Selection.PasteFormat();
    }
    finally
    {
        undoRecord.EndCustomRecord();
    }
}

In the above code, StartCustomRecord is called at the beginning, and EndCustomRecord is called at the end. However, after executing CopyFormat, it seems that a new UndoRecord is created, which results in multiple undo actions for a single operation.

Our questions are:

  1. Why does CopyFormat cause a new UndoRecord to be created?
  2. How can we prevent this behaviour and ensure that only one undo record is created for the entire operation?

Any insights or suggestions would be greatly appreciated. Thanks in advance!

Microsoft 365 and Office | Development | Other
Microsoft 365 and Office | Install, redeem, activate | For business | Windows
Microsoft 365 and Office | Word | For business | Windows
Developer technologies | C#
0 comments No comments
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.