2013-05-24 5 views
0

Надеюсь, вы, ребята, могли бы помочь мне стать умнее. Я делаю простой VS2012 Addin. Addin - это более широкая функциональность поиска/замены, характерная для задачи, регулярно выполняемой в нашей компании. У меня есть опция меню «Инструменты», добавленная в Visual Studio, которая должна открыть расширенный диалог «Найти/заменить», где я могу ввести несколько текстовых полей «Найти/заменить». В конце мне нужно включить флажки опций, которые доступны в исходном диалоговом окне («Match case», «Match whole word», «Use Regular Exions»).Как предоставить несколько vsFindOptions в TextDocument.ReplacePattern?

Проблема заключается в том, что в ReplaceText или ReplacePattern методы, которые они допускают только один необязательный параметр INT будет принят, перечисление используется для обеспечения один из вариантов vsFindOptions, который выглядит следующим образом:

[Guid("A457303F-D058-4415-A2B4-A81B148C7689")] 
public enum vsFindOptions 
{ 
    vsFindOptionsNone = 0, 
    vsFindOptionsMatchWholeWord = 2, 
    vsFindOptionsMatchCase = 4, 
    vsFindOptionsRegularExpression = 8, 
    vsFindOptionsBackwards = 128, 
    vsFindOptionsFromStart = 256, 
    vsFindOptionsMatchInHiddenText = 512, 
    vsFindOptionsWildcards = 1024, 
    vsFindOptionsSearchSubfolders = 4096, 
    vsFindOptionsKeepModifiedDocumentsOpen = 8192, 
} 

я просматривал документации на MSDN [1], где я могу увидеть пример:

[...].ReplacePattern("test", "done deal", 
    (int)vsFindOptions.vsFindOptionsNone, ref dummy); 

это все хорошо, но то, что я хотел бы сделать, это больше похоже на это:

[...].ReplacePattern(@"<span (.\w.+?>)", string.Empty, 
    (int)vsFindOptions.vsFindOptionsRegularExpression, 
    (int)vsFindOptions.vsFindOptionsMatchWholeWord); 

Рассмотрите исходный диалог поиска/замены - опции - это флажки, это варианты с несколькими вариантами, но метод ReplacePattern принимает только один int. Могу ли я просто добавить значения вместе, как например:

(int)vsFindOptions.vsFindOptionsRegularExpression+ 
(int)vsFindOptions.vsFindOptionsMatchWholeWord ? 

(Постарается это позже, но возникают проблемы отладки атм, надстройка больше не доступно в VS)

ответ

1

Вы должны быть в состоянии использовать побитовый оператор ИЛИ ' | ', так

[...].ReplacePattern(@"<span (.\w.+?>)", string.Empty, 
    vsFindOptions.vsFindOptionsRegularExpression | 
    vsFindOptions.vsFindOptionsMatchWholeWord); 
+0

Правда, даже если я хочу применить vsFindOptionsRegularExpression AND vsFindOptionsMatchWholeWord? – Marcus

+0

Да. См. Например [этот ответ] (http://stackoverflow.com/a/8480/1077279) – shamp00

+0

Отлично, спасибо вам за помощь! – Marcus