Как мы уже упоминали, документы могут иметь как текстовое, так и нетекстовое содержимое. Для документов с текстовым содержимым существует отдельный объект — TextDocument. Объект Text Document предоставляет доступ к функциям управления, специфичным для текстового содержимого.
Если у вас есть объект Document, и если этот объект Document относится к текстовым документам, тогда в свойстве Document. Object можно сослаться на экземпляр TextDocument следующим образом:
Dim doc As TextDocument doc = myDocument.Object
В табл. 11.12 содержатся члены TextDocument.
Совет
Текстовый документ представляется как экземпляром Document, так и экземпляром TextDocument. Нетекстовые документы (такие как форма Windows, открытая в окне визуального конструктора Windows Forms) имеют представление в виде Document, но не имеют соответствующего представления в виде TextDocument. К несчастью, нет хорошего способа определить во время выполнения, является ли документ текстовым. Есть один подход, который состоит в том, чтобы попытаться сделать приведение типа или присваивание объекту TextDocument и перехватить исключения, которые могут возникнуть при этом присваивании.
Для манипуляции закладками в документе полезны два метода TextDocument: метод ClearBookmarks удаляет из документа все неименованные закладки, а метод MarkText выполняет поиск по строковому шаблону и устанавливает закладки на соответствующие строки документа. Простой макрос для установки закладок на циклы For в документе на языке Visual Basic приведен в листинге 11.10.
Imports EnvDTE Imports EnvDTE80
Imports Microsoft.VisualStudio.CommandBars Imports System.Diagnostics Imports System.Windows. Forms
Public Module MacroExamples
' Установить закладки на все лексемы 'For' в текущем документе Public Sub BookmarkFor()
Dim doc As Document
Dim txtDoc As TextDocument
1 Сослаться на текущий документ doc = DTE.ActiveDocument
' Получить экземпляр TextDocument из документа txtDoc = doc.Object
' Вызвать метод MarkText со строкой 'For'
Dim found As Boolean = _
txtDoc.MarkText("For", vsFindOptions.vsFindOptionsFromStart)
' MarkText возвращает булев флаг, указывающий, был ли найден ' шаблон поиска в текстовом документе If found Then
MessageBox.Show("All instances of 'For' have been bookmarked.")
Else
MessageBox.Show("No instances of 'For' were found.")
End If End Sub End Module
Объект TextDocument также предоставляет возможность читать и редактировать текст в документе.