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) |
Перемещает внутреннее положение курсора на указанное число позиций вправо. |