Надстройка VSTO Word — вставка элемента управления содержимым вокруг выделенного текста

Я пытаюсь добавить элемент управления форматированным текстовым содержимым вокруг выбранного пользователем текста в документе Word.

Я новичок в VSTO и Content Controls, поэтому использую примеры MSDN в качестве основы. Пример показывает это, которое добавляет элемент управления содержимым в выбранную позицию:

private void AddRichTextControlAtSelection()
        {
            word.Document currentDocument = Globals.ThisAddIn.Application.ActiveDocument;

            currentDocument.Paragraphs[1].Range.InsertParagraphBefore();
            currentDocument.Paragraphs[1].Range.Select();

            Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);

            richTextControl1 = extendedDocument.Controls.AddRichTextContentControl("richTextControl1");
            richTextControl1.PlaceholderText = "Enter your first name";
        }

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


person Can'tCodeWon'tCode    schedule 28.11.2015    source источник
comment
Простое исправление в конце: currentDocument.ActiveWindow.Selection.Range.Select();   -  person Can'tCodeWon'tCode    schedule 28.11.2015
comment
если вы ответили на свой вопрос, опубликуйте свой ответ и примите его.   -  person    schedule 29.11.2015


Ответы (2)


То, что вы нашли, это один из вариантов. Более эффективным и «чистым» (IMO) было бы использование конструктора, который принимает объект RANGE и передает Range. Если вы хотите, чтобы выбор пользователя, то

richTextControl1 = extendedDocument.Controls.AddRichTextContentControl(extendedDocument.Parent.Selection.Range, "richTextControl1");
//the Parent of a Document is the Word.Application
//Selection is a dependent of the Word.Application

В противном случае, основываясь на вашем образце кода:

richTextControl1 = extendedDocument.Controls.AddRichTextContentControl(currentDocument.Paragraphs[1].Range, "richTextControl1");

Обратите внимание, что если вам не нужно работать с расширениями VSTO для элементов управления содержимым, вам не нужно выполнять шаги GlobalFactory, вы можете просто вставить «взаимодействующие» версии элементов управления содержимым.

person Cindy Meister    schedule 30.11.2015

Простое исправление в конце: currentDocument.ActiveWindow.Selection.Range.Select();

person Can'tCodeWon'tCode    schedule 29.11.2015