2010-07-02 3 views
3

Я пишу собственное расширение. Я создал кнопку панели инструментов. Шаблон, который я использовал, был «Пакет Visual Studio», и во время мастера была возможность создать командную кнопку (или что-то в этом роде).Расширение Visual Studio 2010 получает выделенный текст

Таким образом, кнопка появляется, но я не могу понять, как получить текущий документ или выделенный текст в документе.

Любая помощь будет оценена по достоинству.

ответ

7

Есть два подхода к его:

  1. Ручка кнопки глобально и использовать DTE для получения текущего документа (DTE.ActiveDocument) и выбранный текст (((TextDocument)activeDoc).Selection.Text). Вы можете получить объект верхнего уровня DTE в своем пакете, написав: DTE dte = GetService(typeof(SDTE)) as DTE; Обратите внимание, что активным документом может быть null.
  2. Создайте обработчик команд на уровне редактора, чтобы обработать данную команду. Расширение Align Assignments, которое я написал (source), является примером этого. Вот как выглядит command filter.
+0

Спасибо, DTE dte = GetService (typeof (SDTE)) как DTE; был именно тем, чем я был, я играл с GetService. Есть ли какой-либо ресурс, в котором перечислены все, что вы можете ему передать? и что они все делают? –

+1

Один трюк - это поиск интерфейсов, таких как 'SDTE'; «S» означает «сервис» и используется как ключ для объектов, застрявших в поставщике услуг. Взгляните на [это пространство имен в MSDN] (http://msdn.microsoft.com/en-us/library/bb164288.aspx) (прокрутите страницу до тех пор, пока не найдете интерфейсы, начинающиеся с 'SVs'). –

+0

... Я также должен упомянуть: каждая из этих карт * не менее * одного интерфейса, хотя некоторые могут отображать многие. Например, 'SVsUIShell' отображает' IVsUIShell', 'IVsUIShell2' ... через 4. –

Смежные вопросы