Completor Класс

Определение

Важно!

Этот API несовместим с CLS.

Создает оболочку и применяет несколько изменений для текстового представления в виде одной операции.

public ref class Completor : IDisposable
[System.CLSCompliant(false)]
public class Completor : IDisposable
[<System.CLSCompliant(false)>]
type Completor = class
    interface IDisposable
Public Class Completor
Implements IDisposable
Наследование
Completor
Атрибуты
Реализации

Примеры

В этом примере показана простая операция завершения с использованием Completor класса в производной версии Declarations класса. Эта операция переносится в кавычки, когда текст зафиксирован.

namespace MyLanguagePackage  
{  
    class MyDeclarations : Declarations  
    {  
        LanguageService m_languageService;  

        MyDeclarations(LanguageService service) : base()  
        {  
            m_languageService = service;  
        }  

        public override char OnAutoComplete(IVsTextView view,  
                                            string committedText,  
                                            char commitChar,  
                                            int index)  
        {  
            if (committedText != null && view != null && m_languageService != null)  
            {  
                bool fHasCommitChar = commitChar != '\0' && commitChar != '\r';  
                // If user completes word with single quotes, use single quotes;  
                // Otherwise, always use double quotes.  
                char quoteChar = (commitChar == '\'') ? '\'' : '"';  

                Completor completor = new Completor(m_languageService,  
                                                    view,  
                                                    "Add Quotes");  
                // All edits are applied when the completor object is disposed off.  
                using (completor)  
                {  
                    int delta = fHasCommitChar ? 1 : 0;  
                    completor.TypeLeft(committedText.Length + delta);  
                    completor.TypeChar(quoteChar);  
                    completor.TypeRight(committedText.Length + delta);  
                    if (commitChar != quoteChar)  
                    {  
                        completor.TypeChar(quoteChar);  
                    }  
                }  
            }  

            return '\0';    // No further operations needed  
        }  
    }  
}  

Комментарии

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

Этот класс собирает символы и действия курсора и применяет их к текущей позиции курсора в виде одного составного действия. Это позволяет отменить все символы в одной операции. Этот класс поддерживает вставку любого текстового символа, перемещения курсора влево и вправо, а также удаления и Backspace (каждое из них применяется путем вызова другого метода для этого класса).

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

Этот класс поддерживает внутренний буфер, содержащий все вставляемые символы. Этот буфер обрабатывается как поток символов; любой символ может быть вставлен в этот буфер, даже управлять такими символами, как новая строка. Только после вставки символов все управляющие символы обрабатываются. Например, если этот класс используется для вставки строки " Hello\nThere " в пустой исходный файл, то исходный файл будет содержать две строки. Однако курсор помещается в шесть символов после слова « Hello » в первой строке (пять букв в слове « There » и один символ новой строки для всего шести символов). Этот класс не распознает несколько строк в этой ситуации; все, что видит, — это поток символов для вставки.

Примечания для тех, кто наследует этот метод

Этот класс является самодостаточным, и обычно нет причин наследовать от этого класса.

Примечания для тех, кто вызывает этот метод

Создайте экземпляр и используйте этот класс, если необходимо заключить набор символьно-ориентированных вставок в текущую точку курсора.


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

Конструкторы

Completor(LanguageService, IVsTextView, String)

Инициализирует новый экземпляр класса Completor.

Свойства

AtEndOfLine

Определяет, находится ли внутреннее положение курсора в конце текущей строки.

IsExpansionActive

Определяет, редактируется ли в данный момент фрагмент кода.

Методы

Apply()

Применяет все изменения, сделанные через объект Completor.

Dispose()

Очищает какие-либо выделения, сделанные перед уничтожением объекта.

RefreshLine()

Получает текущую строку текста из объекта Source.

TypeBackspace(Int32)

Выполняет заданное число возвратов для редактируемой строки и обновляет внутреннее положение курсора.

TypeChar(Char)

Вставляет указанный символ и обновляет внутреннее положение курсора.

TypeChars(String)

Вставляет указанную строку символов и обновляет внутреннее положение курсора.

TypeDelete(Int32)

Выполняет заданное число операций удаления в редактируемой в данный момент строке.

TypeLeft(Int32)

Перемещает внутреннее положение курсора на указанное число позиций влево.

TypeRight(Int32)

Перемещает внутреннее положение курсора на указанное число позиций вправо.

Применяется к