2010-05-05 1 views
1

У меня есть пакет Visual Studio (2010), который объединяет несколько текстовых операций, например. он вставляет пользовательские свойства в мои файлы csharp.Visual Studio Package/Macro: как вы комбинируете несколько текстовых операций в один Undo

Эти вставки могут стать довольно многочисленными, и я хотел бы иметь возможность отменить действие команды одним нажатием кнопки отмены. Есть ли способ сделать это?

+0

Выполняете ли вы редактирование на интерфейсах, таких как 'IVsTextBuffer' или на интерфейсах, таких как' ITextBuffer'? Ответ «да» в любом случае, но особенности зависят от того, что у вас есть. Кроме того, вы пытаетесь получить одну транзакцию отмены между файлами? –

ответ

0

Да. Если у вас есть действующий

ITextBuffer buffer; 

Вам просто нужно, чтобы получить ITextEdit, как это:

var textEdit = buffer.CreateEdit(); 

Тогда вы можете:

textEdit.Delete(...) 
textEdit.Insert(....) 

и когда вы закончите, вы должны

textEdit.Apply(); 

или

textEdit.Cancel(); 

Если не применять или отменить изменения, другие изменения не будут допущены на буфер .... так что вы, вероятно, хотите, чтобы обернуть ваши изменения попробовать ... в конце концов, так исключение Безразлично Не закрывай свой редактор. Все ваши изменения будут сгруппированы, и одно отмену отменяет их все.

Надеюсь, что это поможет.

+0

ITextEdit является одноразовым, поэтому вы должны поместить его в блок 'using'. Если вы оставите блок 'using' без вызова' Apply() ', то он будет автоматически отменен. Итак, это будет выглядеть примерно так: 'using (var textEdit = buffer.CreateEdit()) {// doStuff, а затем textEdit.Apply(); } ' –

+0

Кроме того, этот подход не будет полностью устранять проблему, если вы редактируете сразу несколько файлов. Если вы это делаете, вам нужно вручную создать транзакцию отмены (если вы можете прояснить вопрос, который поможет) –

+0

@Noah - это круто ... и отличный способ избавиться от попытки ... в конце концов. Благодаря! Можно создать Undo, который охватывает несколько файлов? ... звучит как будущее блоге для меня! –