2015-11-28 3 views
0

Я создаю надстройку Word, которая позволяет пользователю выбирать текст в документе Word и нажимать кнопку на ленте, которая будет обертывать этот текст контентом Управление (богатый текст). В конечном итоге эти элементы управления содержимым будут сопоставлены с XML.VSTO Word Content Control - добавление нескольких RichTextContentControls во время выполнения

код до сих пор, как это:

public partial class Ribbon1 
    { 
     private RichTextContentControl titleRichTextControl; 

     private void Ribbon1_Load(object sender, RibbonUIEventArgs e) 
     { 

     } 

     private void addTitle_Click(object sender, RibbonControlEventArgs e) 
     { 
      AddRichTextControlAtSelection(); 
     } 


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

      currentDocument.ActiveWindow.Selection.Range.Select(); 

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

      titleRichTextControl = extendedDocument.Controls.AddRichTextContentControl("titleRichTextControl"); 
      titleRichTextControl.PlaceholderText = "Enter the title"; 
      titleRichTextControl.Title = "Title"; 
      titleRichTextControl.Tag = "title"; 

     } 

    } 

Все это хорошо, и это работает в первый раз кнопка нажата. Однако, если есть больше чем один «титул» (в данном случае), который нуждается в добавлении, и пользователь нажимает на кнопку второй раз, он выдает ошибку:

The control cannot be added because a control with the name titleRichTextControl already exists in the Controls collection. 

Это понятно, почему он жалуется, но я не может думать о правильном способе перехода к нескольким щелчкам кнопки для создания нескольких элементов управления содержимым одного и того же типа (управление содержимым с большим текстовым содержимым) и с тем же именем (например, «title»).

Может кто-нибудь указать мне в правильном направлении, пожалуйста.

+0

«я не могу думать о правильном пути» - ну, может быть, начать с «пути», например, перебирать элементы управления, выбирать существующие заголовки и думать о том, как избежать дублирования существующего названия? –

ответ

0

ОК это было, как я сделал это в конце концов:

private void addTitle_Click(object sender, RibbonControlEventArgs e) 
     { 
      AddRichTextControlAtSelection(); 
     } 


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

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

      if (currentDocument.ContentControls.Count > 0) 
      { 

       currentDocument.ActiveWindow.Selection.Range.HighlightColorIndex = word.WdColorIndex.wdYellow; 
       currentDocument.ActiveWindow.Selection.Range.Select(); 

       richTextControls = new List<RichTextContentControl>(); 

       foreach (word.ContentControl nativeControl in currentDocument.ContentControls) 
       { 
        if (nativeControl.Type == Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText) 
        { 
         count++; 
         RichTextContentControl tempControl = extendedDocument.Controls.AddRichTextContentControl("VSTORichTextControl" + count.ToString()); 
         richTextControls.Add(tempControl); 
         tempControl.Title = "Title"; 
         tempControl.Tag = "title"; 

         break; 
        } 
       } 
      } 

      else 
      { 
       RichTextContentControl VSTORichTextControl; 
       VSTORichTextControl = extendedDocument.Controls.AddRichTextContentControl("VSTORichTextControl"); 
       VSTORichTextControl.PlaceholderText = "Enter the DM title"; 
       VSTORichTextControl.Title = "Title"; 
       VSTORichTextControl.Tag = "title"; 
      } 

     } 
+0

Да, это «стандартный» - некоторая коллекция и увеличивающееся имя. Если вам не нужны расширения VSTO для элементов управления содержимым, вы можете вставить их на уровне «interop», тогда вы не столкнетесь с этой проблемой. «Имя» предназначено только для VSTO - Word сам по себе не нуждается. –

+0

Пожалуйста, найдите минутку, чтобы щелкнуть галочку рядом с надписью «Ответ». Это помогает администрации форума И полезно для других, у кого может быть тот же или похожий вопрос. –

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